OAuth2

Posted by 戚骏 on April 2, 2021

OAuth2.0定义了授权机制,用来授权第三方应用,获取用户数据。

比如登录网站后,跳转到github授权,网站就可以使用github的用户数据用户数据了。# OAuth2.0四种授权方式

  • 授权码

这种方式是最常用的流程,安全性也最高。

  1. A网站向用户提供B网站跳转链接,请求授权码,此时传递参数:应用id(client_id)、回调地址(redirect_uri)和授权范围(scope)
  2. 用户跳转到B网站后,登录B网站并同意给A网站授权
  3. B网站跳回redirect_uri,并携带授权码(code)
  4. 跳转网址(A网站或其他)拿到授权码后,向B网站请求令牌,此时传递参数:应用id(client_id),应用密码(client_secret),授权方式(grant_type),授权码(code),回调地址(redirect_uri);
  5. B网站返回令牌
  • 隐藏式

  • 密码式

  • 客户端凭证

以Github授权为例

访问这里,进行应用注册

注册界面

提交后会获得client id和client secret.

注册成功界面

使用浏览器访问https://github.com/login/oauth/authorize?client_id=7fd4606296e5d377179f

登录并授权后,github会回调callback URL。这个地址默认是注册时填写的地址,也可以在请求时添加回调地址,如:

https://github.com/login/oauth/authorize?client_id=7fd4606296e5d377179f&redirect_uri=http://localhost:8080/oauth/redirect

github回调时会带上参数code,即授权码

http://localhost:8080/oauth/redirect?code=838e5692a46b6b075dc6

服务器接收授权码后,继续向github请求令牌

https://github.com/login/oauth/access_token?client_id=7fd4606296e5d377179f&client_secret=6e606047b796d38a5a25a5f682db1e23f50d03d1&code=838e5692a46b6b075dc6

此时github返回数据:

access_token=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&scope=&token_type=bearer

其中access_token就是令牌,利用这个令牌,就可以向github获取用户信息了:

请求https://api.github.com/user,并在Http协议头里添加 Authorization:token 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

请求数据