在站点中集成Github的Oauth登陆

注册Oauth App

注册地址:Developer applications (github.com),可以注册多个App,注册完成后,可以在右侧看到注册的App

  

点击进去,可以看到一些基本信息,其中最重要的是CleintId和ClientSecrets(默认没有,自己创建即可),

  

其中ClientId是公开的,用于标志你的OauthApp,ClientSecrets则可以认为是私钥,用来获取认证后的用户令牌的,需要保密,如果丢了或公开了则需要换一个。

认证流程

认证流程其实就是一个通过Github用户授权获取Github用户信息的过程,其流程在其官方文档授权 OAuth 应用程序中写得比较详细,大体分为如下几步:

  1. 将用户重定向到github oauth授权页。

  授权示例地址为:https://github.com/login/oauth/authorize?client_id=ba674d236a91709b69b1官方文档说明更加详细些。其中有两个参数比较重要:client_id和redirect_uri。

  • client_id就是前面注册时分发的CleintId,是必选的,否则github不知道用于和哪个站点集成认证。
  • redirect_uri则是认证后的跳转地址,用于传递用户的临时token,这个参数是选填的,如果不填会跳转到注册时填的跳转地址。

  如果用户未授权,会出现下面的一个授权确认的对话框,如果已经授权,会直接跳转到跳转地址。

      

 
 2. 获取用户授权码。根据授权码获取用户访问token。

  用户授权完成后,会跳转到指定的跳转页,同时会返回一个临时的用户授权码code作为参数。

      

有的这个用户授权码code,还不能获取用户token,需要把这个授权码传给后端,后端和私钥client_secret一起获取用户token。

如下是一个获取token地址示例:https://github.com/login/o获取auth/access_token?client_id=xxx&client_secret=xxx&code=xxx。还有几个其它参数可以参考官方文档

获取到的用户令牌示例如下:access_token=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&scope=&token_type=bearer

PS:因为授权id是公开的,因此是不能直接根据授权码获取用户信息的,必须和私钥配合。

 
  3. 根据用户令牌获取用户信息:

  有了用户令牌后,就可以访问用户信息了,以其用户信息接口https://api.github.com/user为例:

到此时,已经能获取到用户信息了,可以将改用户直接登录,或关联到现有的用户了。后面流程和Oauth就没有关系了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章