Springboot 实现Github 授权登录

程序员微信社区

添加 下边微信: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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值