注册Oauth App
注册地址:Developer applications (github.com),可以注册多个App,注册完成后,可以在右侧看到注册的App
点击进去,可以看到一些基本信息,其中最重要的是CleintId和ClientSecrets(默认没有,自己创建即可),
其中ClientId是公开的,用于标志你的OauthApp,ClientSecrets则可以认为是私钥,用来获取认证后的用户令牌的,需要保密,如果丢了或公开了则需要换一个。
认证流程
认证流程其实就是一个通过Github用户授权获取Github用户信息的过程,其流程在其官方文档授权 OAuth 应用程序中写得比较详细,大体分为如下几步:
授权示例地址为:https://github.com/login/oauth/authorize?client_id=ba674d236a91709b69b1, 官方文档说明更加详细些。其中有两个参数比较重要:client_id和redirect_uri。
-
client_id就是前面注册时分发的CleintId,是必选的,否则github不知道用于和哪个站点集成认证。
-
redirect_uri则是认证后的跳转地址,用于传递用户的临时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是公开的,因此是不能直接根据授权码获取用户信息的,必须和私钥配合。
有了用户令牌后,就可以访问用户信息了,以其用户信息接口https://api.github.com/user为例:
到此时,已经能获取到用户信息了,可以将改用户直接登录,或关联到现有的用户了。后面流程和Oauth就没有关系了。