Github OAuth 登录开发流程解析

使用 Github Oauth/App 可以为自己的站点添加使用Github 登录的按钮,其中的逻辑十分简单

首先需要创建一个属于自己的Github App,并选择自己所需要的权限,创建app页面的callback板块十分重要,它规定了用户授权app后会跳转过去的地址,同时会在跳转时为该地址上附上code和state参数,记住这一点。

当创建完成后,我们还需要为该app创建一个 client_secret,这个密钥十分重要,在生成后就无法再次查看了,将其保存好,且千万不要将其上传到git仓库中。这个密钥结合app的 client_id,可以用来获取用户的 access_token

接下来的过程就简单了,因为我们已经定义了回调地址,只需要在访问回调地址时,使用链接中的code参数,加上已经保存的 client_secret和 client_id,就可以通过Github的api获取用户的token,并最终通过token去代替用户操作Github

根据上述流程,总结一下从用户点击“Sign in with Github”到登录的全过程:

1,用户点击登录按钮,通过访问后端login地址,重定向至https://github.com/login/oauth/authorize 页面,该页面需要携带参数:

2,用户在重定向后的Github页面选择授权,github会重定向给定的redirect_uri地址,并且为该地址携带code(Github提供)和state(自己提供)参数

3,跳转redirect_uri页面后,获取地址中的code和state参数,其中code用于访问https://github.com/login/oauth/access_token来获取可用的access_token,state可以用来校验请求是否合法,以及携带一些自定义数据用于登录后的重定向等;

这样成功获取token后,就可以将token用来做任何想做的事了,比如使用302重定向到登录前的页面等。

细节

补充

多个callback URL

使用Github App时可以定义多个callback URL,而Github OAuth应用只能定义一个

如何延长token的有效期

如果创建的是Github App,要注意查看App设置里optional features是否启用了User-to-server token expiration 这一项,启用了这一项代表access_token有效期只有8小时,需要通过refresh_token来刷新新的token,关闭后可以获得正常有效期的access_token。

如何允许访问特定资源

如果需要使用Github App来操作特定的Git仓库内容,那么除了登录步骤外,还需要额外安装App才能进行操作