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

时间:2013-01-12 02:53:18

标签: oauth-2.0 jwt

我一直在阅读this spec以使用OAuth使用JWT(JSON网络令牌)。

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

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

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

这让我感到困惑。 为什么JWT身份验证需要单独进行? 在什么情况下/用例需要进行JWT身份验证?

2 个答案:

答案 0 :(得分:2)

<强> 1。 JWT作为授权资助

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

请注意,这取代了更常规的授权代码授权,其中代码与授权服务器紧密绑定,并且具有更灵活的机制,其中授权(JWT)可能由第三方发布,以便启用跨越行政边界的联邦系统。

JWT将是短暂的,只能一次性使用。

<强> 2。 JWT作为客户端身份验证

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

这暗示/定义/要求机密客户端,JWT替代更常规(且难以管理)的客户机密。

JWT将使用很长时间并且多次使用。

答案 1 :(得分:-1)

我知道这可能有点太晚了,但这是简短的回答(对于其他愿意了解更多的人)。

客户授权是一个涉及记录用户的过程,授权客户授权他代表他的资源执行某些操作。

如果允许客户端在没有明确用户权限的情况下执行某项任务,则需要进行客户端身份验证。这是一个cron任务或您的服务之一,为了执行一些后台处理需要访问存储在另一个进程中的用户数据。

这样就可以进行机器到机器的通信,而无需让最终用户参与。

当然,为了允许第三方客户,您通常希望让用户自己让他自由地允许或拒绝客户端访问他的数据,而您肯定不希望您的用户提示授予权限给您“结算服务”执行一些后台任务以生成下一个PDF发票(作为示例)。

后一种情况需要客户端身份验证。

希望这有帮助。