【问题标题】:Azure AD-B2C error: IDX10501: Signature validation failed. Unable to match keys: kid: '[PII is hidden]', token: '[PII is hidden]'Azure AD-B2C 错误:IDX10501:签名验证失败。无法匹配键:孩子:'[PII 已隐藏]',令牌:'[PII 已隐藏]'
【发布时间】:2018-12-15 17:55:01
【问题描述】:

我正在使用 Swagger 进行 API 调用,为了进行身份验证,我能够生成 Bearer 令牌,但之后我会收到 401 作为响应。检查日志后,错误如下:

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed. Unable to match keys: 
kid: '[PII is hidden]', 
token: '[PII is hidden]'

我的 ConfigureAuth 方法如下:

private static void ConfigureAuth(IAppBuilder app)
{
    var metadataEndpoint = string.Format(
        configProvider.GetConfigValue<string>("ida:AadInstance", "AuthConfig"),
        configProvider.GetConfigValue<string>("ida:Tenant", "AuthConfig"),
        configProvider.GetConfigValue<string>("ida:SignInPolicy", "AuthConfig"));

    string[] validAudiences = configProvider.GetConfigValue<string>("ida:Audiences", "AuthConfig").Split(',');
    TokenValidationParameters tvps = new TokenValidationParameters
    {
        ValidAudiences = validAudiences,
        AuthenticationType = configProvider.GetConfigValue<string>("ida:SignInPolicy", "AuthConfig"),
        ValidateAudience = true,
        ValidateIssuer = configProvider.GetConfigValue<bool>("validateIssuer", "AuthConfig"),
        ValidateLifetime = true,
        ValidAudience = configProvider.GetConfigValue<string>("Swagger:ClientId", "AuthConfig"),
        //NameClaimType = "http://schemas.microsoft.com/identity/claims/objectidentifier",
    };

    //SecurityToken securityToken;
    //JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
    app.UseOAuthBearerAuthentication(
        new OAuthBearerAuthenticationOptions
         {
            AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(metadataEndpoint)),
            Provider = new OAuthBearerAuthenticationProvider()
            {
                OnRequestToken = (context) =>
                {
                    if (!string.IsNullOrEmpty(context.Token))
                    {
                    }

                    return Task.FromResult<int>(0);
                },
                OnValidateIdentity = (context) =>
                    {
                        ////TO DO
                        //// Steps to perform after identity validation

                        return Task.FromResult<int>(0);
                    }
            }
        });
}

【问题讨论】:

  • 谁在生成您的 JWT?
  • 错误是说'OpenID Connect端点没有密钥????用于签署那个 JWT,所以我无法验证它'
  • JWT 令牌将从 AD B2C 生成。

标签: oauth-2.0 openid-connect azure-ad-b2c


【解决方案1】:

我必须将我的 OpenIdConnectAuthenticationOptions.MetadataAddress 更新为 https://login.microsoftonline.com/tfp/{tenantId}/{policyId}/v2.0/.well-known/openid-configuration。

【讨论】:

    【解决方案2】:

    事实证明,当发行者使用 RSA 以外的算法签署令牌时,会报告相同的消息。显然 ECDSA 即将推出: https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/487

    【讨论】:

      【解决方案3】:

      我能够通过传递正确的元数据端点来验证令牌。 *

      https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/.well-known/openid-configuration

      *

      【讨论】:

      • 你能找到那个来源吗?
      • 抱歉没看懂,要我把完整的代码放在这里吗?
      • 嗨? Rumpi - 不,你是怎么想出来的?我假设一些网页?
      • 您好,抱歉,我在某些网页上没有看到,我团队的安全顾问发现了。
      • 我还得更新TokenValidationParameters.ValidAudience
      猜你喜欢
      • 2019-09-15
      • 2020-12-28
      • 2019-08-13
      • 2017-09-02
      • 2018-07-23
      • 2020-04-22
      • 2021-11-10
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多