oauth2.0登录原理

183 阅读2分钟

使用场景

假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时给了你两个选择:一个是在我的网站上注册拥有一个新账户,然后用注册的用户名来留言;一个是使用 github 帐号登录,使用你的 github 用户名来留言。前者你觉得过于繁琐,于是惯性地点击了 github 登录按钮,此时 OAuth 认证流程就开始了。

以下是完整的认证流程图

image.png

运作流程

  1. 首先网站先要在github注册登记,确定需要的权限,github会给网站 client_id和secret_id
  2. 用户在网站点击github登录时网站提供client_id跳转到github的认证地址,用户登录github后可以看到将授权给网站具体有哪些权限(github通过client_id获取),用户同意后自动跳回网站(回调地址也在第1步设置)
  3. 回调地址带有github提供的凭据,网站通过凭据和第1步拿到的secret_id向github获取最后的通行令牌 access_token
  4. 使用access_token就可以调用github的api获取对应用户信息,如姓名、邮箱等

关于凭据和令牌

1. 授权完重定向回来为什么不直接返回令牌?

因为令牌是可以直接用来获取用户信息的,保密要求极高,就不能用重定向来传输(会暴露在浏览器地址栏),应该通过后端服务器传输,这样就只能重定向提供一个临时凭据,让网站后端通过凭据来获取令牌

2. 为什么不直接使用凭据获取用户信息?

那凭据也就变成令牌,不安全

参考