从AAD接收访问令牌,使用url https://login.microsoftonline.com/gdfdddddd-87dd-497c-b894-xxxxxx/oauth2/v2.0/token下面的
grant_type :client_credentials
client_id :xxxxx-1ff5-4615-8d71-yyyyyy
client_secret:7aCwfdsfsfsfds.AC61Fg:cm33
范围: https://vault.azure.net/.default
使用以下代码手动验证上述接收到的令牌&它运行良好的
IConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>("https://login.microsoftonline.com/TestDomain310320.onmicrosoft.com/v2.0/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConfig = AsyncHelper.RunSync(async () => await configurationManager.GetConfigurationAsync(CancellationToken.None));
TokenValidationParameters validationParameters =
new TokenValidationParameters
{
ValidIssuer = "https://sts.windows.net/a3d2bff3-87dd-497c-b894-f63befdd7496/",
ValidAudiences = new[] { "https://vault.azure.net" },
IssuerSigningKeys = openIdConfig.SigningKeys
};
SecurityToken validatedToken;
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
var user = handler.ValidateToken(token, validationParameters, out validatedToken);修改参数Scope:https://graph.microsoft.com/.default &已成功接收到AAD令牌,但使用上述代码进行的令牌验证失败,错误消息为"IDX10511:签名验证失败。密钥尝试:'PII是隐藏的‘“。使用上述客户端id验证的AAD应用程序具有"user.read/user.read.basicall权限“。如果使用Scope:https://graph.microsoft.com/.default从AAD接收令牌,为什么令牌验证失败
观察:
作用域接收的令牌: https://vault.azure.net/.default
{
"typ": "JWT",
"alg": "RS256",
"x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
"kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
}虽然Scope:https://graph.microsoft.com/.default接收到的令牌具有额外的当前属性以避免重放攻击,但这是否是令牌验证失败的原因?
{
"type": "JWT",
"nonce": "wCXLm9rF5Nma2S7OswU44uAVRpVbM_20WrWJkqbWe6Y",
"alg": "RS256",
"x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
"kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
}请建议一下。
发布于 2020-04-01 10:26:54
您不应该查看或验证未颁发给您自己的应用程序的令牌。预定的接收方、KeyVault和MS图将自己进行必要的验证。您应该处理这些访问令牌作为一个不透明的小块,在调用这些Apis时将它们插入到Authorization头中。
Api所有者、图形或KeyVault明天可以更改它们中的声明,甚至选择加密它们的令牌,您的代码就会中断。
你为什么要验证令牌?如果您正在读取应用程序中不属于您的已验证的Apis令牌,以此作为身份验证的证据,则您将设置为失败。此外,这也是一个安全问题,因为世界上任何一个能够获得KeyVault或MS图形访问令牌的应用程序都可以将其传递给您的Apis并破坏它。
以下是供参考的讨论-- 无法验证签名。#609
发布于 2020-04-01 03:08:56
是的,这个错误是由JWT头中的nonce字段引起的。
据我所知,如果我们请求图形api的访问令牌,JWT令牌将包含nonce字段。然后我们无法在后端验证它(出于安全原因,microsoft不允许我们执行此操作)。
https://stackoverflow.com/questions/60959927
复制相似问题