如果graph.microsoft.com,如果作用域,访问令牌验证将失败,这>

问题描述 投票:0回答:2
从AAD收到的访问令牌,使用以下网址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:[7aCw] fdsfsfsfds.AC61Fg:cm33

scope: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);
修改的参数

范围:https://graph.microsoft.com/.default

已成功接收AAD令牌,但使用上述代码的令牌验证失败,并显示错误消息“ IDX10511:签名验证失败。尝试的键:'[PII被隐藏]'。 ”具有上述客户端ID的经过验证的AAD应用具有“ user.read/user.read.basicall权限”。如果使用Scope:https://graph.microsoft.com/.default] >>从AAD收到令牌,为什么令牌验证失败?观察:

通过

scope:https://vault.azure.net/.default

]]收到的令牌> { "typ": "JWT", "alg": "RS256", "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU", "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU" }
虽然使用

Scope:https://graph.microsoft.com/.default

接收的令牌具有额外的[[nonce
属性以避免重播攻击,这是令牌验证失败的原因吗? { "type": "JWT", "nonce": "wCXLm9rF5Nma2S7OswU44uAVRpVbM_20WrWJkqbWe6Y", "alg": "RS256", "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU", "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU" } 请提出建议。
从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 -...

是,错误是由JWT标头中的nonce字段引起的。
据我所知,如果我们请求图api的访问令牌,则JWT令牌将包含nonce字段。然后,我们将无法在后端对其进行验证(出于安全原因,Microsoft不允许我们执行此操作)。

您不应该查看或验证不是发行给自己的Apis的令牌。预期的接收者,KeyVault和MS Graph将自己进行必要的验证。在调用这些Apis时,应该将这些Access Tokens as an opaque blobs填充到Authorization标头中。
Api所有者,Graph或KeyVault明天可以更改它们中存在的声明,甚至选择加密其令牌,您的代码将被破坏。

您为什么要验证令牌?如果您正在读取应用程序中不属于您的经过验证的Apis令牌作为身份验证的证明,那么您就将自己设置为失败。另外,这也是一个安全问题,因为世界上任何可以获取KeyVault或MS图的访问令牌的应用程序都可以将其传递给您的Apis并对其进行破坏。

oauth-2.0 jwt azure-active-directory asp.net-core-webapi azure-ad-graph-api
2个回答
0
投票

0
投票
Api所有者,Graph或KeyVault明天可以更改它们中存在的声明,甚至选择加密其令牌,您的代码将被破坏。
© www.soinside.com 2019 - 2024. All rights reserved.