具体可以参考:官方文档
请求的url:
https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&&scope=user_info
这个接口里的client_id和redirect_uri都 是第一步生成的,response_type和scope对应的值都是不变的
它的原理就是当我们向这个url发送请求的时候,它就会返回一个code到我们的重定向url里面,返回的是这种形式:
http://localhost:8887/callback?code=60ade58a3f0d73dc2f59e69de84165a300ff7b7f81563df86158aaf5a1d87cf8
这里我把它封装到了accessToken对象里面:
@GetMapping("/callback")
public String callback(@RequestParam(name="code") String code){
AccessTokenDto accessTokenDto = new AccessTokenDto();
accessTokenDto.setClient_id(clientId);
accessTokenDto.setClient_secret(clientSecret);
accessTokenDto.setCode(code);
accessTokenDto.setRedirect_uri(redirectUri);
String accessToken = githubProvider.getAccessToken(accessTokenDto);
GithubUser user = githubProvider.getUser(accessToken);
System.out.println(user);
return "index";
}
上一步里面,当返回code以后,我去调用getAccessToken方法,在里面通过okhttp发送了post请求去获取token,这个地方我觉得很奇怪,因为,它发送的是post请求,按理说不应该在请求的url里面拼接字符串了,但是我试了一下,如果不拼接的话,请求会出错,具体原因是什么我暂时还不清楚,这样就可以获得token了。
MediaType mediaType
= MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
System.out.println(accessTokenDto.toString());
RequestBody body = RequestBody.create(JSON.toJSONString(accessTokenDto),mediaType);
Request request = new Request.Builder()
.url("https://gitee.com/oauth/token?grant_type=authorization_code&code="+accessTokenDto.getCode()
+"&client_id="+accessTokenDto.getClient_id()+"&redirect_uri="+accessTokenDto.getRedirect_uri()+"&client_secret="+accessTokenDto.getClient_secret())
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
String str= response.body().string();
// 返回的是下面这样一个字符串,所以先把它给转换成json对象,然后获取它里面对应的token
// {"access_token":"783e1f8ec832e301ee9c831e201396a8","token_type":"bearer","expires_in":86400,"refresh_token":"5940b861e2bab8e2d2ffba74ebf320ede12af85245c4011c528e12a614cecb29","scope":"user_info","created_at":1585487419}
JSONObject obj=JSONObject.parseObject(str);
return obj.get("access_token").toString();
gitee提供的有接口,可以通过token然后获取用户信息。
https://gitee.com/api/v5/user?access_token=+accessToken
根据上面获得的token,向这个url发送请求就可以获取用户信息了。
参考链接:
参考链接1
参考链接2