1:先去Github注册一个账号
注册网站 点击查看官方文档:
根据流程创建号自己的应用:参考文档
查看你的Client ID和Client Secret
然后去创建一个web项目
1. 引入thymeleaf模版依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.调用授权接口超链接
填上client_id,redirect_uri,scope,state
<a href="https://github.com/login/oauth/authorize?client_id=452d7db4f2e88378d0d1&redirect_uri=http://localhost:8080/callbacks&scope=user&state=1">授权登录</a>
3.点击授权登录解析code码获取token的依赖
okhttp引入解析code maven
<!--okHTTP的依赖,.主要解析授权登录后的access_token,-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.3.1</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
4.创建私人令牌
创建成功后获得密钥也就是用户的token,直接输入https://api.github.com/user?access_token=你的密钥 就可以查看你的账号信息
代码实现
(分析:授权成功进入callbacks请求,会携带code,satte两个参数。我们利用okthttp解析出code,从而获取到access_token,然后在根据access——)
1. 代码结构:
创建User用户类,和授权所需要信息的类
AccessToken类
@Data
public class AccessToken {
private String client_id;
private String client_secret;
private String code;
private String redirect_uri;
private String state;
}
User类
@Data
public class User {
private Long id;
private String name;
private String bio;
//以上字段是token解析出来的json字符串中三个,具体其他属性根据需要在添加
}
2.首先看下授权成功进入的callbacks请求
@Controller
public class AuthoriceContrller {
@Autowired
private GithubPro githubPro;
@GetMapping("/callbacks") //首先通过a标签的连接登录成功之后会返回code ,state两个参数并且进入到callbacks请求
public String callback(@RequestParam(name = "code")String code,
@RequestParam(name = "state")String state) throws IOException {
AccessToken accessToken=new AccessToken();//根据官方文档,之后进入callbacks请求后,需要再次传递一下五个属性。利用okhttp解析code获取到token
accessToken.setCode(code);
accessToken.setState(state);
accessToken.setRedirect_uri("http://localhost:8080/callbacks");
accessToken.setClient_id("452d7db4f2e88378d0d1");
accessToken.setClient_secret("0d5bc7c23c075550e094bc1cefed0dc4fbcb4691");
String acess_token= githubPro.getAccressToken(accessToken);
User user=githubPro.getUsers(acess_token);
System.err.println("授权登录的user:"+user.toString());
return "redirect:/";
}
}
3:创建一个GithubPro类,主要用于解析code,access_token
@Component
public class GithubPro {
//根据授权登录成功返回的code解析出token
public String getAccressToken(AccessToken accessToken) throws IOException {
MediaType mediaType = MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(accessToken));
Request request = new Request.Builder()
.url("https://github.com/login/oauth/access_token")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
String string= response.body().string();//这是获取请求体的信息
//返回的string是 access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
String acess_token=string.split("&")[0].split("=")[1];
System.err.println("解析出来的token:"+acess_token);
return acess_token;
}
}
//在根据解析出来的token获取用户的信息(json字符串形式)
public User getUsers(String token) throws IOException {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.github.com/user?access_token="+token)//这个token就是自己创建的令牌的密钥。也就是code解析出来的token
.build();
Response response = client.newCall(request).execute();
String string= response.body().string();//这时候的string就是用户的json字符串
User user = JSON.parseObject(string, User.class);//将json字符串转换未User对象的属性
return user;
}
}
以上就是Github授权登录的大致流程,常量可以直接写在application.properites中