首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果作用域为graph.microsoft.com,则访问令牌验证失败

如果作用域为graph.microsoft.com,则访问令牌验证失败
EN

Stack Overflow用户
提问于 2020-03-31 21:07:12
回答 2查看 576关注 0票数 0

从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

使用以下代码手动验证上述接收到的令牌&它运行良好的

代码语言:javascript
运行
复制
 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

代码语言:javascript
运行
复制
     {
       "typ": "JWT",
      "alg": "RS256",
       "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
       "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
      }

虽然Scope:https://graph.microsoft.com/.default接收到的令牌具有额外的当前属性以避免重放攻击,但这是否是令牌验证失败的原因?

代码语言:javascript
运行
复制
   {
     "type": "JWT",
    "nonce": "wCXLm9rF5Nma2S7OswU44uAVRpVbM_20WrWJkqbWe6Y",
    "alg": "RS256",
   "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
   "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
 }

请建议一下。

EN

回答 2

Stack Overflow用户

发布于 2020-04-01 10:26:54

您不应该查看或验证未颁发给您自己的应用程序的令牌。预定的接收方、KeyVault和MS图将自己进行必要的验证。您应该处理这些访问令牌作为一个不透明的小块,在调用这些Apis时将它们插入到Authorization头中。

Api所有者、图形或KeyVault明天可以更改它们中的声明,甚至选择加密它们的令牌,您的代码就会中断。

你为什么要验证令牌?如果您正在读取应用程序中不属于您的已验证的Apis令牌,以此作为身份验证的证据,则您将设置为失败。此外,这也是一个安全问题,因为世界上任何一个能够获得KeyVault或MS图形访问令牌的应用程序都可以将其传递给您的Apis并破坏它。

以下是供参考的讨论-- 无法验证签名。#609

票数 1
EN

Stack Overflow用户

发布于 2020-04-01 03:08:56

是的,这个错误是由JWT头中的nonce字段引起的。

据我所知,如果我们请求图形api的访问令牌,JWT令牌将包含nonce字段。然后我们无法在后端验证它(出于安全原因,microsoft不允许我们执行此操作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60959927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档