Oauth JWT(Json Web令牌)受众“;澳元;与客户Id-什么';有什么区别?
我正在我的身份验证服务器中实现OAuth 2.0 JWT access_令牌。但是,我不清楚JWTOauth JWT(Json Web令牌)受众“;澳元;与客户Id-什么';有什么区别?,oauth,oauth-2.0,jwt,Oauth,Oauth 2.0,Jwt,我正在我的身份验证服务器中实现OAuth 2.0 JWT access_令牌。但是,我不清楚JWTaud声明和client\u idHTTP头值之间的区别。它们是一样的吗?如果没有,你能解释一下两者的区别吗 我怀疑,aud应该指的是资源服务器,client\u id应该指的是身份验证服务器识别的一个客户端应用程序(即web应用程序或iOS应用程序) 在我当前的例子中,我的资源服务器也是我的web应用程序客户端 事实证明,我的怀疑是对的。JWT中的受众aud声明是指应该接受令牌的资源服务器 正如《
aud
声明和client\u id
HTTP头值之间的区别。它们是一样的吗?如果没有,你能解释一下两者的区别吗
我怀疑,aud
应该指的是资源服务器,client\u id
应该指的是身份验证服务器识别的一个客户端应用程序(即web应用程序或iOS应用程序)
在我当前的例子中,我的资源服务器也是我的web应用程序客户端 事实证明,我的怀疑是对的。JWT中的受众
aud
声明是指应该接受令牌的资源服务器
正如《华盛顿邮报》所说:
令牌的受众是令牌的预期接收者
访问群体值是一个字符串——通常是
正在访问的资源,例如https://contoso.com
OAuth中的client\u id
指的是将从资源服务器请求资源的客户端应用程序
客户端应用程序(例如,您的iOS应用程序)将从您的身份验证服务器请求JWT。这样做时,它会传递它的client\u id
和client\u secret
以及可能需要的任何用户凭据。授权服务器使用client\u id
和client\u secret
验证客户端,并返回JWT
JWT将包含一个aud
声明,该声明指定JWT对哪些资源服务器有效。如果aud
包含www.myfunwebapp.com
,但客户端应用尝试在www.supersecretwebapp.com
上使用JWT,则访问将被拒绝,因为资源服务器将看到JWT不是为它准备的 JWTaud
(观众)索赔
根据:
“aud”(受众)声明标识了JWT所属的接收者
为……准备的。拟处理JWT的每个委托人必须
让自己认同受众声明中的价值。如果委托人
处理声明时,不会使用
“aud”索赔如果存在该索赔,则JWT必须
拒绝。在一般情况下,“aud”值是大小写数组-
敏感字符串,每个字符串都包含StringOrURI值。在
特殊情况下,当JWT有一个受众时,“aud”值可能是
包含StringOrURI值的单个区分大小写的字符串最新版本
受众价值观的解释通常是特定于应用的。
此声明的使用是可选的
规范定义的受众(aud
)声明是通用的,并且是特定于应用程序的。预期用途是识别令牌的预期接收者。收件人的意思是特定于应用程序的。受众值可以是字符串列表,也可以是单个字符串(如果只有一个aud
声明)。令牌的创建者不强制要求正确验证aud
,接收方负责确定是否应使用令牌
无论值是什么,当接收者验证JWT并且希望验证令牌是否用于其目的时,必须确定aud
中的值标识自身,并且只有在aud
声明中存在接收者声明的ID时,令牌才应进行验证。这是URL还是其他特定于应用程序的字符串并不重要。例如,如果我的系统决定在aud
中使用以下字符串标识自己:api3.app.com
,则只有当aud
声明的受众值列表中包含api3.app.com
时,它才应该接受JWT
当然,收件人可能会选择忽略aud
,因此这仅在收件人希望确认令牌是专门为其创建的情况下才有用
根据规范,我的解释是,aud
声明对于创建仅在特定目的下有效的特制JWT非常有用。对于一个系统,这可能意味着您希望令牌对某些功能有效,但对其他功能无效。您可以在仍然使用相同的密钥和验证算法的情况下,发行仅限于特定“受众”的令牌
由于在典型情况下,JWT由可信服务生成,并由其他可信系统(不希望使用无效令牌的系统)使用,因此这些系统只需协调它们将使用的值
当然,aud
是完全可选的,如果您的用例不保证,可以忽略它。如果您不想将令牌限制为特定受众使用,或者您的任何系统实际上都不会验证aud
令牌,那么它是无用的
示例:访问与刷新令牌
我能想到的一个人为(但简单)的例子是,我们可能希望使用JWTs访问和刷新令牌,而不必实现单独的加密密钥和算法,但只是希望确保访问令牌不会验证为刷新令牌,反之亦然
通过使用aud
,我们可以为刷新令牌指定refresh
声明,并在创建这些令牌时为访问令牌指定access
声明。当请求从刷新令牌获取新的访问令牌时,我们需要验证刷新令牌是否是真正的刷新令牌。如上所述的aud
验证将通过在aud
中专门查找refresh
声明,告诉我们该令牌是否实际上是有效的刷新令牌
OAuth客户端ID与JWTaud
索赔
OAuth客户端ID完全不相关,并且没有