OAuth教程|青训营笔记

142 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

OAUTH是Open Authorization 的简写

  • OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的

OAuth适合干什么?

  • 就是登录授权,比如某一个网站可以利用第三方账号来登录:如微信、qq等,我们称这个过程为授权。授权的过程中,要确定好相互之间认证的规范,业界常用的就是OAuth

OAuth 2.0定义了四种授权方式:
1.授权码模式(authorization code)
2.简化模式(implicit)
3.密码模式(resource owner password credentials)
4.客户端模式(client credentials)

授权码模式

如图,参考抖音开放平台技术文档 image.png 具体名词解释:

scope用户授权的作用域
code/auth code授权码,临时调用凭证,即临时票据
token调用令牌,接口调用令牌
access_token接口调用凭证
refresh_token刷新令牌,用来刷新 access_token
open_id授权用户在当前应用的唯一标识
unionid用户统一标识。用户在当前开发者帐号下的唯一标识(未绑定开发者帐号没有该字段)

lc.png

code 相当于临时令牌,Access Token 相当于长期令牌(时间由授权服务器决定),那么为什么要用临时令牌换长期令牌呢?

  • 用 code 换 Access Token 并不是通过用户代理(用户代理通常是浏览器),而是第三方应用的后台代码直接向授权服务器请求的,用户代理并不知道 Access Token 的值。这样做的好处是避免在用户代理上留下历史记录,也避免用户端中了木马后泄露 **Access Token **值。

有了 Access Token 之后呢?

第三方应用可以做两类事:

  • 一类是在第三方应用上活动。 (这类其实不需要 Access Token,OAuth 其实此时只是作一个单点登录的意思。)
  • 一类是向资源服务器请求/传送资源,比如以用户的身份在 QQ 空间发布文章。 (这才是 Access Token 的重要作用,它就是发布权限的凭据啊,这也是 OAuth 真正想解决的问题。)

客户端模式(Client Credentials)

客户端模式简洁来说,就是省去用户登录模块,也就是授权码模式的下半部分 举例:抖音的数据开放服务api,可以获取榜单等数据,采用认证机制,只有认证了的第三方应用才可以使用这些资源。 相当于抖音做了一个授权服务器,拿到了key和secret,第三方应用时在取数据时把 key、secret 传给榜单服务器,然后榜单服务器向授权服务器验证 key、secret,验证成功就返回数据,也能实现需求。

简化模式

直接把 Access Token 发送到用户代理(用户代理通常是浏览器),用户能够看到 Access Token。

密码模式

用户把用户名和密码发送给第三方应用,第三方应用拿着用户名和密码去授权服务器校验