Github 授权登录 Oauth2.0

1. 在 github 的 settings -> Developer settings -> 新建应用

需要填写

application name, (应用名称),

homepage url(), (网站首页)

auth callback url, (授权后的回调地址, 即为 redirect_uri)

新建应用后, github 给我们两个重要的参数 client_id 和 client_secret

2. 应用场景-github 授权登录

如果你建立了一个个人的网站, 你想让别人不用通过网站本身的注册就可以访问你的网站,那么用户 拥有的第三方帐号体系如微博、github 等第三方应用授权登录是个不错的方案。

想要获得 github 的授权, 你必须进行第 1 步操作--最基本的申请。 接下来还要将用户引导到 github 的授权登录页, github 的授权登录页是 https://github.com/login/oauth/authorize?client_id=[你的client_id]&redirect_uri=[你的auth callback url]

其中 redirect_uri 是第 1 步你配置好的, 在授权登录页可以不传此参数, github 会默认跳到你配置好的授权后的回调地址, 本地开发时, 我喜欢将授权地址设置为 http://localhost:8000/github/oauth/callback

3. 处理回调

服务器处理 http://localhost:8000/github/oauth/callback 请求 该回调地址是 github 授权处理后返回的 url 地址, github 会在请求中带一个参数 code 我们可以使用 code 获取 access_token, 请求为

acc_res = requests.get("https://github.com/login/oauth/access_token",
                            params={"client_id": "xxx",
                                    "client_secret": "xxx",
                                    "code": code,
                                    "redirect_uri": "xxx"
                                    })

返回的 acc_res 中就含有 access_token, 使用 access_token 就可以获得用户的 github 帐号信息。

4. 图解 github 授权

基于 Oauth2.0 的授权流程都是差不多的, 区别在于申请 client_id 和 client_secret 这个过程是否复杂,像新浪微博的申请就比较麻烦。

graph LR
a[开发者]-->|在 Github 创建应用|b[Github]
b-->|登记应用信息并返回client_id 和 client_secret|d[开发者]
graph LR
a[匿名用户]-->|使用Github 帐号登录|b[引导到 Github 登录授权页]
b-->|用户授权|d[Github 处理授权请求并返回回调地址和参数code]
graph LR
d[服务器处理回调地址]-->|使用code获取access_token继而获取 Github帐号信息|e[创建用户并绑定用户的Github帐号]
e-->f[跳转到网站首页或某个特定页]

5. 开源的 Oauth2.0 仓库

本人在 Github 开发了一个 Github 授权登录的 SDK, 如果有需要的朋友请移步oauth2, 代码尚有许多不足之处,欢迎 pull request。

发表评论

评论内容
 

评论列表, 共 0 条评论