程序员微信社区
添加 下边微信:37278755
Spring 或者其他的框架实现 Github登录的方式大同小异,这是一个标准的OAuth2的模型。如果不了解可以访问官网进行阅读 oauth2,下面我们简单说一下如何实现Github的授权登录。
⭐ 文末附带项目所有源代码
创建一个Github OAuth应用
可以在您的个人帐户或您具有管理访问权限的任何组织下创建和注册OAuth应用。在创建OAuth应用时,请记住仅使用您认为公开的信息来保护您的隐私。
访问地址:https://github.com/settings/apps
注意一下 Authorization callback URL ,在代码里的回调要保持一致,否则会提示回调地址不对
实现Github授权登录
⭐ 流程
代码实现
- 创建登录页
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Github OAuth2 Demo</title>
</head>
<body>
<h1>Github OAuth2 Demo</h1>
<a href="https://github.com/login/oauth/authorize?client_id=f8d4932d0589c31e4ae2&redirect_uri=https://blog.csdn.net/weixin_38937840/article/details/105382447&scope=user&state=1">
进行Github授权
</a>
</body>
</html>
- 实现用接口调用
@Controller
public class GithubAuthController {
/**
* 进入授权页面 点击GitHub 授权
* @return
*/
@GetMapping(value = "login")
public String login(){
return "login.html";
}
}
- 访问 http://localhost:9006/login
- 点击进行 Github授权
输入用户名密码
- 截取回调路径的参数
例如:?code=225d6d342f1e34ba939e&state=1
- 请求 localhost:9006/access-token?code=225d6d342f1e34ba939e&state=1 获取用户信息
@RestController
public class GithubAccessTokenController {
/**
* 获取用户基本信息
* @param code 授权码
* @param state 状态值
* @return
* @throws JsonProcessingException
*/
@GetMapping(value = "/access-token")
public GithubUserInfo getToken(@RequestParam String code ,@RequestParam String state) throws JsonProcessingException {
GithubAccessTokenDTO accessTokenDTO = new GithubAccessTokenDTO();
accessTokenDTO.setClient_id("f8d4932d0589c31e4ae2");
accessTokenDTO.setClient_secret("5c043645a4939dc5343739f63de672d508bf8642");
accessTokenDTO.setCode(code);
accessTokenDTO.setRedirect_uri("https://blog.csdn.net/weixin_38937840/article/details/105382447");
accessTokenDTO.setState(state);
//access_token=c2971568150c882deff55cce5a265955ad8a0524&scope=user&token_type=bearer
//获取accessToken
GithubAccessTokenBO accessToken = HttpClient.getAccessToken(accessTokenDTO);
//获取用户信息
GithubUserInfo user = HttpClient.getUser(accessToken.getAccess_token(),accessToken.getToken_type());
return user;
}
}
返回的用户信息
这是可以结合我们自己的业务进行登录的后的用户信息留存,demo到此结束,更多的需要结合业务场景
{
"id": 37392164,
"login": "yanghaiji",
"node_id": "",
"avatar_url": "https://avatars.githubusercontent.com/u/37392164?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/yanghaiji",
"html_url": "https://github.com/yanghaiji",
"followers_url": "https://api.github.com/users/yanghaiji/followers",
"following_url": "https://api.github.com/users/yanghaiji/following{/other_user}",
"gists_url": "https://api.github.com/users/yanghaiji/gists{/gist_id}",
"starred_url": "https://api.github.com/users/yanghaiji/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/yanghaiji/subscriptions",
"organizations_url": "https://api.github.com/users/yanghaiji/orgs",
"repos_url": "https://api.github.com/users/yanghaiji/repos",
"events_url": "https://api.github.com/users/yanghaiji/events{/privacy}",
"received_events_url": "https://api.github.com/users/yanghaiji/received_events",
"type": "User",
"site_admin": false,
"name": "杨海吉",
"company": "Java有货",
"blog": "yanghaij327@163.com",
"location": "bei jing",
"email": null,
"hireable": null,
"bio": "我为胜利而来,不向失败低头",
"twitter_username": null,
"public_repos": 30,
"public_gists": 0,
"followers": 16,
"following": 0,
"created_at": "2018-03-15T03:44:38Z",
"updated_at": "2021-02-02T10:21:12Z",
"private_gists": 2,
"total_private_repos": 0,
"owned_private_repos": 0,
"disk_usage": 1387733,
"collaborators": 0,
"two_factor_authentication": false,
"plan": {
"name": "free",
"space": 976562499,
"collaborators": 0,
"private_repos": 10000
}
}
项目源码 : https://github.com/yanghaiji/javayh-demo/tree/demo/source-oauth2-code/github-oauth