在AAD的JWT中,有一个键“ aud”。 https://jwt.io/,说的是“受众群体”。 (令牌的目的或对象)。我的问题是, aud
是否重视网站特定-我可以检查aud并期望它与检查令牌是否用于我的特定网站一样吗?
答案 0 :(得分:1)
在Azure AD中,受众群体值始终表示令牌所针对的资源。
您可以使用API的客户端ID或应用ID URI获取访问令牌。 您使用的将是令牌中的受众。 因此,如果您制作一个API,则应检查受众是该API的客户端ID还是应用程序ID URI。 您可以肯定地知道,如果令牌是为您的API设计的,它将永远是其中之一。
编辑:以下信息不正确。 如果我知道您的API的标识符+您的租户ID, 我可以使用客户端凭据获取您API的访问令牌! 令牌将不包含作用域或角色,而不能。 因此,至关重要的是,检查是否存在有效的委派权限(又称作用域)或有效的应用程序权限(在角色声明中)。
这是错误的:如果我试图使用我的AAD租户的API标识符获取访问令牌,那么它不会给我令牌。 任何以正确的受众群体传递访问令牌的应用都有权在获取令牌时调用您的API。
答案 1 :(得分:1)
您已经从juunas那里很好地解释了观众的价值。
我要在Github上的Azure-Samples中添加一个特定的代码示例,该示例演示如何手动验证JWT令牌并检查受众价值。 (验证发行人也很重要)
查看此特定代码,尤其是在注释附近:“ 我们同时接受此服务应用程序的应用程序ID URI和应用程序ID ”
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
TokenValidationParameters validationParameters = new TokenValidationParameters
{
// We accept both the App Id URI and the AppId of this service application
ValidAudiences = new[] { audience, clientId },
// Supports both the Azure AD V1 and V2 endpoint
ValidIssuers = new[] { issuer, $"{issuer}/v2.0" },
IssuerSigningKeys = signingKeys
};
代码示例:
Specific file with code excerpt shown above
Azure-Samples: Manually validating a JWT access token in a web API