使用JWT在OAuth中的客户端身份验证和授权授予之间的差异

F21*_*F21 5 oauth-2.0 jwt

我一直在阅读这篇关于在OAuth中使用JWT(JSON web令牌)的规范.

2.12.2中,它表示JWT可以用作授权授权或客户端身份验证.

根据我的理解,身份验证是识别某些内容(此用户是他声称的用户),授权是检查用户是否被允许执行他所请求的内容.

JWT作为授权授权是有意义的,因为请求是通过签名隐式标识的.大多数支持此方法的API都使用JWT作为授权授权.请参阅salesforcegoogle.

这是让我感到困惑的地方.为什么需要将JWT身份验证作为一个单独的东西? 在什么情况下/用例需要进行JWT认证?

Han*_* Z. 5

1. JWT作为授权授予

在这种情况下,客户端以某种未指定的方式获取 JWT,它可以将其呈现给令牌端点上的授权服务器,以代表颁发 JWT 的一方获取访问令牌(和可选的刷新令牌)。这可能是最终用户(或资源所有者)本人,但 JWT 也可以由一般受信任的第三方(其他用户或组织)签名。这适用于公共客户和机密客户。

请注意,这取代了更常规的授权代码授予,其中代码与授权服务器紧密绑定,而采用更灵活的机制,其中授权 (JWT) 可能由第 3 方颁发,从而实现跨管理边界工作的联合系统。

JWT 的寿命很短,并且只能一次性使用。

2. JWT作为客户端认证

在这种情况下,客户端向令牌端点提供 JWT,作为需要与令牌端点交互的任意授予类型(甚至可能是 JWT 授权授予!)的流程的一部分;一个典型的示例是授权代码授予,其中客户端收到资源所有者同意的代码,需要在令牌端点处将其交换为访问令牌(和可选的刷新令牌),并且客户端使用 JWT 对自身进行身份验证。

这意味着/定义/需要一个保密的客户端,并且 JWT 替代了更常规(且难以管理)的客户端密钥。

JWT 的寿命很长,可以多次使用。