OAuth2 快速入门
作者 | Rekent
来源 | urlify.cn/yqqQNj
1 OAuth简述OAuth 2.0 是一个授权协议 , 它允许软件应用代表(而不是充当)资源拥有者去访问资源拥有者的资源 。 应用向资源拥有者请求授权 , 然后取得令牌(token) , 并用它来访问资源 , 并且资源拥有者不用向应用提供用户名和密码等敏感数据 。
2 OAuth角色OAuth整个授权过程中定义了4种角色:
- 客户端(Cilent):代表资源拥有者访问受保护资源的软件 , 它使用OAuth 来获取访问权限;
- 资源拥有者(Resource Owner):是有权将访问权限授权给客户端的主体 , 在大多数情况下 , 资源拥有者是一个人 , 他使用客户端软件访问受他控制的资源;
- 资源服务器(Resource Server):资源服务器能够通过HTTP 服务器进行访问 , 在访问时需要OAuth 访问令牌 。 受保护资源需要验证收到的令牌 , 并决定是否响应以及如何响应请求;
- 授权服务器(Authorization Server):一个HTTP 服务器 , 它在OAuth 系统中充当中央组件 。 授权服务器对资源拥有者和客户端进行身份认证 , 让资源拥有者向客户端授权、为客户端颁发令牌 。 某些授权服务器还会提供额外的功能 , 例如令牌内省、记忆授权决策;
3 OAuth授权许可类型3.1 授权码许可类型(Grant Type: Authorization Code)资源拥有者通过在授权服务器完成登录 , 获取授权码的形式 , 客户端通过Ajax请求最终兑换令牌 , 该种形式使得令牌对外是不可见的 , 一定程度上保证了令牌的安全 , 通常用于Web端的OAuth2.0 开发 。 具体流程步骤为:(1)资源拥有者在授权服务器完成登录 , 并完成授权 , 资源服务器重定向至客户端 , 并附带一个临时授权码 , 该授权码是短时效性的;(2)客户端获取到临时授权码后 , 通过临时授权码以及其他应用信息 , 向资源服务器接口请求 , 以此来换取令牌(后端接口请求) 。
文章插图
3.2 隐式许可类型(Grant Type:Implicit)有些 Web 应用是纯前端应用 , 没有后端 。 此时就没有使用授权码形式的必要了 , 而是直接返回令牌 , 省略了授权码再去兑换令牌的步骤(该步骤本是在后端进行 , 目的是对前端隐藏令牌内容) 。 隐式许可流程不可用于获取刷新令牌 。 因为浏览器内的应用具有短暂运行的特点 , 只会在被加载到浏览器的期间保持会话 。
// 请求 , response_type 参数的值为token , 其为一个授权页面 , 用户需要在上面完成授权 , 授权完成后 , 会重定向至redirect_uriHTTP/1.1 302 Moved TemporarilyLocation: http://localhost:9001/authorize?response_type=token charset=utf-8Content-Length: 444Date: Fri, 31 Jul 2015 20:50:19 GMT // 返回 , 直接返回accss_token , 注意此处为 #access_tokenGET /callback#access_token=987tghjkiu6trfghjuytrghj Intel Mac OS X 10.10; rv:39.0)Gecko/20100101 Firefox/39.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Referer: http://localhost:9001/authorize?response_type=code --tt-darkmode-color: #FFFFFF;">3.3 客户端凭证许可类型(Grant Type:Client Credential)后端系统之间需要直接通信 , 且本身并不代表某个特定用户 , 没有用户对客户端授权 。 客户端直接向授权服务器进行身份认证 , 而授权服务器给客户端颁发访问令牌 。 需要提供客户端id以及key(在对接前 , 手动申请)其大致的请求如下:
POST /tokenHost: localhost:9001Accept: application/jsonContent-type: application/x-www-form-encodedgrant_type=client_credentials --tt-darkmode-color: #FFFFFF;">3.4 断言许可类型在断言许可类型下 , 客户端会得到一条结构化的且被加密保护的信息 , 叫作断言 , 使用断言向授权服务器换取令牌 。 这种许可类型只使用后端信道 , 与客户端凭据许可类型很相似 , 没有明确的资源拥有者参与 。 与客户端凭据流程不同的是 , 由此颁发的令牌所关联的权限取决于所出示的断言 , 而不仅仅取决于客户端本身 。 由于断言一般来自于客户端之外的第三方 , 因此客户端可以不知道断言本身的含义 。 目前标准的断言格式:
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 能力|美国研发快速法评估神经网络的不确定性 改进自动驾驶车决策能力
- 入门|做抖音影视赚钱比工资多,教大家新手也可快速入门
- 开发人员|ER(实体关系)建模入门指引
- DDR5内存曝光:16GB 4800MHz快速更省电
- 快速概览 + 详细了解N:N聚类算法是如何应用的
- 喵喵机错题打印机P1:随时打印,随时学习,快速整理错题
- 零基础小白Python入门必看:通俗易懂,搞定深浅拷贝
- 快速安装一个OpenShift 4 准生产集群