我一直在阅读this spec以使用OAuth使用JWT(JSON网络令牌)。
在2.1和2.2中,它表示JWT可以用作授权授权或客户端身份验证。
根据我的理解,身份验证是识别某些内容(此用户是他声称的用户),授权是检查是否允许用户执行他所请求的内容。
JWT作为授权授权是有意义的,因为请求是通过签名隐式标识的。大多数支持此方法的API都使用JWT作为授权授权。请参阅salesforce和google。
这让我感到困惑。 为什么JWT身份验证需要单独进行? 在什么情况下/用例需要进行JWT身份验证?
答案 0 :(得分:2)
<强> 1。 JWT作为授权资助
在这种情况下,客户端以某种未指定的方式获得JWT,它可以向令牌端点上的授权服务器提供,以代表发布JWT的一方获取访问令牌(和可选的刷新令牌) 即可。这可能是最终用户(或资源所有者)本人,但JWT也可以由受信任的第三方(其他用户或组织)签名。这适用于公共和机密客户。
请注意,这取代了更常规的授权代码授权,其中代码与授权服务器紧密绑定,并且具有更灵活的机制,其中授权(JWT)可能由第三方发布,以便启用跨越行政边界的联邦系统。
JWT将是短暂的,只能一次性使用。
<强> 2。 JWT作为客户端身份验证
在这种情况下,客户端向令牌端点上呈现JWT,作为需要与令牌端点交互的任意授权类型(甚至可能是JWT授权授权!)的流的一部分;典型示例是授权代码授权,其中客户端接收资源所有者同意的代码,需要在令牌端点处交换访问令牌(和可选的刷新令牌),并且客户端进行身份验证本身与JWT。
这暗示/定义/要求机密客户端,JWT替代更常规(且难以管理)的客户机密。
JWT将使用很长时间并且多次使用。
答案 1 :(得分:-1)
我知道这可能有点太晚了,但这是简短的回答(对于其他愿意了解更多的人)。
客户授权是一个涉及记录用户的过程,授权客户授权他代表他的资源执行某些操作。
如果允许客户端在没有明确用户权限的情况下执行某项任务,则需要进行客户端身份验证。这是一个cron任务或您的服务之一,为了执行一些后台处理需要访问存储在另一个进程中的用户数据。
这样就可以进行机器到机器的通信,而无需让最终用户参与。
当然,为了允许第三方客户,您通常希望让用户自己让他自由地允许或拒绝客户端访问他的数据,而您肯定不希望您的用户提示授予权限给您“结算服务”执行一些后台任务以生成下一个PDF发票(作为示例)。
后一种情况需要客户端身份验证。
希望这有帮助。