OAuth2 快速入门( 三 )
5.1.2 payload常用申明
文章插图
5.1.3 JWT签名:JOSE这里分享两种算法:(1)HAMC算法:使用对称密钥 , 授权服务器和资源服务器都能够生成令牌 , 因为它们都拥有创建令牌所需的密钥 。 (2)RSA算法:使用公钥加密的话 , 授权服务器拥有公钥和私钥 , 可用于生成令牌 , 而受保护资源则只能访问授权服务器的公钥 , 用于验证令牌 。 与HMAC相比 , 资源服务器就无法自己生成有效的令牌 。 令牌请求资源服务器时 , 再对其进行验签 , 验签成功再解析payload部分 。 只有签名有效才能继续解析JWT 并检查其内容的一致性 。 如果所有检查都通过 , 就可以将它交给应用使用 。
5.2 在线获取令牌信息:令牌内省将令牌信息打包放入令牌本身也有其不足之处 。 为了包含所有必要的声明以及保护这些声明所需的密码结构 , 令牌尺寸会变得非常大 。 而且 , 如果受保护资源完全依赖令牌本身所包含的信息 , 则一旦将有效的令牌生成并发布 , 想要撤回会非常困难 。 令牌内省:授权服务器向客户端颁发令牌 , 客户端向受保护资源出示令牌 , 受保护资源则向授权服务器查询令牌状态(内省请求:资源服务器发送给授权服务器内省端点的表单形式的HTTP 请求 , 询问该令牌是否有效)受保护资源在请求过程中需要向授权服务器进行身份认证(提供client_id以及client_secret) , 以便授权服务器知道是谁在询问 , 并可能根据询问者的身份返回不同的响应 。 内省协议只是要求受保护资源进行身份认证 , 并未规定如何认证 。
POST /introspect HTTP/1.1Host: localhost:9001Accept: application/jsonContent-type: application/x-www-form-encodedAuthorization: Basic cHJvdGVjdGVkLXJlc291cmNlLTE6cHJvdGVjdGVkLXJlc291cmNlLXNlY3JldC0x token=987tghjkiu6trfghjuytrghj // 内省请求的响应是一个JSON 对象 , 用于描述令牌信息 。 它的内容与JWT 的载荷相似HTTP 200 OKContent-type: application/json{"active": true,"scope": "foo bar baz","client_id": "oauth-client-1","username": "alice","iss": "http://localhost:9001/","sub": "alice","aud": "http://localhost:/9002/","iat": 1440538696,"exp": 1440538996,}
内省协议规范还在JWT 的基础上增加了几个声明定义 , 其中最重要的是active 声明 。 此声明告诉受保护资源当前令牌在授权服务器上是否有效 , 且是唯一必须返回的声明 。 使用令牌内省会导致OAuth 系统内的网络流量增加 。 为了解决这个问题 , 允许受保护资源缓存给定令牌的内省请求结果 。 建议设置短于令牌生命周期的缓存有效期 , 以便降低令牌被撤回 但缓存还有效的可能性 。
5.3 令牌生命周期管理OAuth 令牌通常遵循一个可预测的生命周期 。 令牌由授权服务器创建 , 由客户端使用 , 并由受保护资源验证 。 它们可能会自行失效 , 也可能被资源拥有者(或者管理员)从授权服务器上撤回 。 对于JWT等格式的令牌无效 , 只能过期但无法失效 。
5.3.1 令牌撤回协议OAuth 令牌撤回是一个简单的协议 , 它让客户端可以很简洁地告诉授权服务器将本来有效的令牌撤回 。 客户端需要向一个专门的撤回端点发送附带身份认证的HTTP POST 请求 , 并将要撤回的令牌作为表单参数放入请求主体 。
POST /revoke HTTP/1.1Host: localhost:9001Accept: application/jsonContent-type: application/x-www-form-encodedAuthorization: Basic b2F1dGgtY2xpZW50LTE6b2F1dGgtY2xpZW50LXNlY3JldC0xtoken=987tghjkiu6trfghjuytrghj
客户端身份认证时使用的凭据与在令牌端点上使用的凭据相同(判断是否时该客户端申请的令牌) 。 授权服务器会查询令牌值 , 如果找到令牌 , 会将它从存储令牌的地方删除 , 并返回响应告知客户端删除成功 。 如果授权服务器未找到令牌 , 或者不允许出示令牌的客户端撤回该令牌 , 授权服务器还是会返回操作成功 , 目的是不向客户端透露本不属于它的令牌信息 。
5.3.2 刷新令牌刷新令牌由授权服务器颁发给客户端 。 在OAuth 中 , 访问令牌随时可能失效 。 令牌有可能被用户撤销 , 也可能过期 , 或者其他系统导致令牌失效 。 访问令牌失效后 , 客户端在使用时会收到错误响应 。 当然 , 客户端可以再次向资源拥有者请求权限 , 也可以使用刷新令牌向授权服务器请求新的访问令牌 。 刷新令牌还可以让客户端缩小它的权限范围 。 如果客户端被授予A、B、C 三个权限范围 , 但是它知道某特定请求只需要A 权限范围 , 则它可以使用刷新令牌重新获取一个仅包含A 权限范围的访问令牌
文章插图
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 能力|美国研发快速法评估神经网络的不确定性 改进自动驾驶车决策能力
- 入门|做抖音影视赚钱比工资多,教大家新手也可快速入门
- 开发人员|ER(实体关系)建模入门指引
- DDR5内存曝光:16GB 4800MHz快速更省电
- 快速概览 + 详细了解N:N聚类算法是如何应用的
- 喵喵机错题打印机P1:随时打印,随时学习,快速整理错题
- 零基础小白Python入门必看:通俗易懂,搞定深浅拷贝
- 快速安装一个OpenShift 4 准生产集群