一、OAuth介绍
OAuth(Open Authorization)是一种 Industry Standard 的授权协议,允许用户将自己的资源授权给第三方应用程序,而不需要将用户名和密码提供给第三方应用程序
1、OAuth的角色
- Resource Server(资源服务器):拥有用户资源的服务器,例如Google、Facebook等。
- Client(客户端):第三方应用程序,例如一个移动应用程序或Web应用程序。
- Authorization Server(授权服务器):负责验证用户身份和颁发access token的服务器,通常与Resource Server相同。
- User(用户):拥有资源的用户。
2、Auth的步骤
Step 1: 客户端注册
客户端注册到授权服务器,获取客户端ID和客户端密钥。
Step 2: 用户授权
用户访问客户端,客户端重定向用户到授权服务器的授权页面。
Step 3: 授权服务器验证
授权服务器验证用户身份,显示授权页面,询问用户是否同意授权。
Step 4: 授权
用户同意授权,授权服务器重定向用户回客户端,带有授权码。
Step 5: 客户端获取access token
客户端使用授权码请求access token,授权服务器颁发access token。
Step 6: 客户端访问资源
客户端使用access token访问资源服务器,获取用户的资源。
二、Github-OAuth流程
1、应用登记
在这里注册你的应用:Github应用注册
2、获取client_id
和client_secret
3、触发登陆动作
当用户在你的网站点击登陆的时候,跳转到这个地址:
https://github.com/login/oauth/authorize
同时带上client_id
和redirect_uri
示例:
https://github.com/login/oauth/authorize?client_id=114&redirect_uri=http://localhost:3000/redirect
4、回调并请求令牌
用户在Github鉴权通过后,Github会跳到之前指定的redirect_uri
地址,同时带上鉴权码code
这时候后端即可拿到鉴权码code
、应用IDclient_id
和client_secret
向Github请求令牌了
接口:
POST
https://github.com/login/oauth/access_token
参数:
参数名称 | 类型 | 说明 |
---|---|---|
client_id | string | 必填。 从 GitHub 收到的 OAuth app 的客户端 ID。 |
client_secret | string | 必填。 从 GitHub 收到的 OAuth app 的客户端密码。 |
code | string | 必填。 收到的作为对步骤 1 的响应的代码。 |
redirect_uri | string | 用户获得授权后被发送到的应用程序中的 URL。 |
示例
https://github.com/login/oauth/access_token?client_id=114&client_secret=514&code=810
5、获取用户数据
有了令牌
后,就可以向Github获取最终需要的数据了
获取用户数据:
接口:GET
https://api.github.com/user
请求头:Authorization: Bearer OAUTH-TOKEN
参考: https://docs.github.com/zh/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps