如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

github登陆的事情,苏南大叔已经写过一篇文章了。如何申请appidsecret请参见这里,https://newsn.net/say/oauth-login-github-apply.html 。拿到了client_idclient_secret之后,我们就可以开工了。但是,从哪里着手呢?其实github的这个登陆,肯定是遵守现在最流行的oauth协议的。oauth协议也有几个分支,这里我们只讨论:使用范围最广的oauth2.0的情况。

github的oauth登陆的基本流程,oauth2.0原理解析 - oauth2

github的oauth登陆的基本流程,oauth2.0原理解析(图3-1)

官方对这个事情的描述,见这里:https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/about-authorization-options-for-oauth-apps/ 。苏南大叔用大家能够接受的语言,描述一下这个oauth过程。其实过程不难,就是和传统的思维不是很一样。所以理解上有些偏差。

一,用户在苏南大叔的博客上,发起登陆请求

这个时候,请求的是我这边的服务器地址。该地址,开始准备了三个参数,分别是client_id/scope/state

  • client_id就是从github上面申请到的那个appid
  • scope就是说你的应用会请求用户的那些数据,这个是会在登陆页面上展示的。
  • state是个随机数,用于数据验证,所以,这个值越随机越好。

服务器准备好这些参数后,就将用户的请求导向到了github的登陆验证页面,并带上三个参数。

github的oauth登陆的基本流程,oauth2.0原理解析 - oauth_login

github的oauth登陆的基本流程,oauth2.0原理解析(图3-2)

二,github服务器拿到client_idscope之后,会对授权进行验证

如果当前用户没有登陆,那么显示登陆界面(登陆完成后,会回到授权检测逻辑)。如果登陆了,就检测client_idscope,是否已经授权。授权通过的话,就进入第三步。如果没有通过,就显示对应的授权表单。

github的oauth登陆的基本流程,oauth2.0原理解析 - oauth_login_2

github的oauth登陆的基本流程,oauth2.0原理解析(图3-3)

三,github服务器,授权检测通过,页面跳转

如果检测通过,github服务器会将服务器生成的一个code,以及第一步中的state传递回来。传递的途径是用户的浏览器,就是说,在用户的浏览器中,github服务器进行了页面跳转。跳转到了我们在github上设置好的 callback地址。

四,服务器上的callback地址开始工作

callback地址,接收github服务器返回的codestate参数。一方面,state可以用于自身检验数据合法性,毕竟是自己服务器生成并传递的值。另外一方面,state也将参与后续的服务器之间的通信。所以也是个凭证。所以,这个state值绝对不可以是个固定的值,必须是个随机数。你懂的。

接收到的codestate(双方已知),再加上,双方服务器都已知的早期设定值client_id/client_secret/redirect_uri。这五个要素组合到一起,用于到github上面请求access_token

五,github服务器处理access_token请求

github的服务器,接收到:苏南大叔的服务器端的access_token请求后,会对相关的数据进行检测。通过codestate来检测对应要请求的github用户,是否真正授权了。如果是,则返回access_token/scope/token_type这三个值给苏南大叔的服务器。

六,服务器处理access_token

苏南大叔的服务器拿到access_token/scope/token_type后,仅仅处理了access_token,另外的两个值暂时没用。然后用这个access_token去和github的服务器做最后的一次交互。(看到“最后”这个词,是不是松了一口气....)去拿用户的基本资料。

七,github服务器处理用户资料数据请求

凭借自己颁发的access_token,来返回对应用户的授权过的数据。

八,服务器处理用户资料

苏南大叔的服务器拿到github的用户资料后,就剩下对用户进行绑定的过程了。 当前用户也许已经是网站的会员了,或者也许没有注册过。(苏南大叔的博客是没有注册途径的,所以,不可能有人已经是会员)。这个时候,会员绑定的逻辑就是大家自己决定的了。绑定成功之后,调用自己的方法,设置好当前用户的登陆状态,就可以了。

总结

好了,基本上讲完了。市面上这么多oauth的授权应用,基本上都大同小异。大家都可以按照这个思路进行编写。不过,至于国内的各大网站的oauth,极其严格的审核制度,就不是苏南大叔能够帮上忙的了。

更多oauth相关文章,请大家拿起鼠标,点击这里查看:https://newsn.net/tag/oauth/

  【github】秘籍文章入口,仅传授于有缘之人  github    oauth

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/github-oauth-flow.html
上一篇好文:github的oauth登陆系列之注册appkey
下一篇好文:github的oauth登陆之curl

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~