GitHub OAuth授权登录

GitHub OAuth授权登录

OAuth

第三方登入主要基于OAuth 2.0。OAuth(开放授权)协议是一个开放标准,为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的
---- 百度百科

实现步骤

GitHub OAuth API官方文档

Building OAuth Apps

  • 创建OAuth App
    在这里插入图片描述

这里的Authorization callback URL在后文中会介绍
这里仅做本地开发,所以填了本地地址,如果项目部署好了,应该填http://xxx/callback
打开OAuth documentation查看官方文档

GitHub授权流程

在这里插入图片描述

  • 这里介绍了如何使自己的项目获取GitHub授权的流程:

第一步:跳转至GitHub去请求认证
第二步:认证成功后,由GitHub跳转回我自己的项目
第三步:我自己的项目通过GitHub跳转回来时带的access token去访问GitHub API

Step1.

在这里插入图片描述

这是第一步去GitHub认证的request所需带的参数,通过GET方式发送该请求https://github.com/login/oauth/authorize,并带参数
注册OAuth App后会提供一个client_id
认证成功后回跳转到redirect_uri页面
login参数指定一个账户去获取授权
scope是授权后我们想要拿到的信息,这里我只需要user
state参数非必需,用于防治跨域伪造请求攻击
allow_signup就是是否向未认证的用户提供注册GitHub的选项,默认是允许的

####Step2
在这里插入图片描述

如果GitHub用户接受该授权请求,则GitHub将带着codestate参数重定向到自己之前注册的那个callback地址,我这里填的是http://localhost:8080/callback,因此授权成功后会跳转至下面这个网址,这里看到带了code参数,state就是上一步请求中带的state参数,原样返回。这里服务端需要接收这个codestate参数用于之后获取access_token

http://localhost:8080/github/oauth/callback?code=14de2c737aa02037132d&state=1496989988474

拿到请求中的code参数后服务端向https://github.com/login/oauth/access_token这个API发送POST请求,并且在该请求中带上client_id,client_secret,code参数,请求成功后会返回带有access_token的信息。

这里请求返回的Json格式信息是access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer,而我们需要的token是e72e16c7e42f292c6912e7710c838347ae178b4a,因此在处理时要注意。

Step3.

在这里插入图片描述

获取到access_token后, 再调用https://api.github.com/user?access_token=xxx这个API,就可以获取之前scope中对应的GitHub用户信息。 用户的基本信息内容如下所示, 根据第一步传入的不同的 scope,获取到的用户信息也是不同的,博客后台使用 login 字段作为用户的唯一标示。

整个流程的顺序图

在这里插入图片描述
这里再盗一张linwalker第三方登入例子-GitHub授权登入(node-koa)中的图
在这里插入图片描述

实现

Step1.

点击“登录”,向GitHub发送授权请求

<li th:if="${session.user == null}">
    <a href="https://github.com/login/oauth/authorize?client_id=xxx&redirect_uri=http://localhost:8080/callback&scope=user&state=1">登录</a>
</li>
Step2.

GitHub带参数code回调callback地址
服务端拿到code参数POST请求GitHub获取access_token
GitHub返回access_token
服务端拿到access_token请求用户信息,之后将该用户信息存到数据库实现持久化

AuthorizeController处理callback页面

@Controller
public class AuthorizeController {
   

    @Autowired
    private GithubProvider githubProvider;

    //在application.properties中配置github.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值