github的oauth登陆的基本流程,oauth2.0原理解析
发布于 作者:苏南大叔 来源:程序如此灵动~关于github
登陆,苏南大叔已经写过如何申请appid
和secret
,详情参见文末链接。拿到了client_id
和client_secret
之后,我们就可以开工了。
但是,从哪里着手呢?其实github
的这个登陆,肯定是遵守现在最流行的oauth
协议的。oauth
协议也有几个分支,在本文中,苏南大叔只讨论使用范围最广的oauth2.0
。
官方对这个事情的描述,见这里: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服务器对授权进行验证
github服务器拿到client_id
和scope
之后,会对授权进行验证。如果当前用户没有登陆,那么显示登陆界面(登陆完成后,会回到授权检测逻辑)。如果登陆了,就检测client_id
和scope
,是否已经授权。授权通过的话,就进入第三步。如果没有通过,就显示对应的授权表单。
三,github
服务器,授权检测通过,页面跳转
如果检测通过,github
服务器会将服务器生成的一个code
,以及第一步中的state
传递回来。传递的途径是用户的浏览器,就是说,在用户的浏览器中,github
服务器进行了页面跳转。跳转到了我们在github
上设置好的 callback
地址。
四,服务器上的callback
地址开始工作
callback
地址,接收github
服务器返回的code
和state
参数。一方面,state
可以用于自身检验数据合法性,毕竟是自己服务器生成并传递的值。另外一方面,state
也将参与后续的服务器之间的通信。所以也是个凭证。所以,这个state
值绝对不可以是个固定的值,必须是个随机数。你懂的。
接收到的code
和state
(双方已知),再加上,双方服务器都已知的早期设定值client_id
/client_secret
/redirect_uri
。这五个要素组合到一起,用于到github
上面请求access_token
。
五,github
服务器处理access_token
请求
github
的服务器,接收到:苏南大叔的服务器端的access_token
请求后,会对相关的数据进行检测。通过code
和state
来检测对应要请求的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/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
您好,用了你的登录插件回调也正常 但是评论还是需要输入用户名邮件啥的
望回?
wumingboke@chinaweb.wiki
后来github改协议了,好像需要做些修改
评论
啦啦啦,德玛西亚
6666666666666
不错额
我来试试评论功能
测试成功