使用场景
假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时给了你两个选择:一个是在我的网站上注册拥有一个新账户,然后用注册的用户名来留言;一个是使用 github 帐号登录,使用你的 github 用户名来留言。前者你觉得过于繁琐,于是惯性地点击了 github 登录按钮,此时 OAuth 认证流程就开始了。
以下是完整的认证流程图
运作流程
- 首先网站先要在github注册登记,确定需要的权限,github会给网站 client_id和secret_id
- 用户在网站点击github登录时网站提供client_id跳转到github的认证地址,用户登录github后可以看到将授权给网站具体有哪些权限(github通过client_id获取),用户同意后自动跳回网站(回调地址也在第1步设置)
- 回调地址带有github提供的凭据,网站通过凭据和第1步拿到的secret_id向github获取最后的通行令牌 access_token
- 使用access_token就可以调用github的api获取对应用户信息,如姓名、邮箱等
关于凭据和令牌
1. 授权完重定向回来为什么不直接返回令牌?
因为令牌是可以直接用来获取用户信息的,保密要求极高,就不能用重定向来传输(会暴露在浏览器地址栏),应该通过后端服务器传输,这样就只能重定向提供一个临时凭据,让网站后端通过凭据来获取令牌
2. 为什么不直接使用凭据获取用户信息?
那凭据也就变成令牌,不安全