AzureAD身份验证实现中的Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter错误日志

umuewwlo  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(247)

我们已经为API授权集成了AzureAD,API授权工作正常,但看到Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter的错误日志,其中包含以下消息,

IDX 40003:从Microsoft身份平台获取的令牌中不存在tidtenantId声明。
IDX 10516:签名验证失败。无法匹配密钥:kid:“*”。令牌验证参数中的密钥数:“16”。配置中的键数:“0”。捕获的异常:“[类型为”System.Text.StringBuilder“的PII已隐藏。有关详细信息,请参阅https://aka.ms/IdentityModel/PII.]”。标记:“[类型为”系统.身份模型.令牌.Jwt.JwtSecurityToken“的PII已隐藏。有关详细信息,请参阅https://aka.ms/IdentityModel/PII.]”。有效生存期:'False'。有效的出版者:'错误'**

我们的API被UI应用程序以及通过Swagger/Postman使用。
根本原因应该是什么?

ghg1uchk

ghg1uchk1#

错误IDX10516: Signature validation failed. Unable to match key: kid发生在验证令牌签名的解码令牌中的Kid无效时。因此需要从openid提供程序加载密钥。

代码:

var openidConfiguration = new ConfigurationManager<OpenIdConnectConfiguration>(
                $"https://login.microsoftonline.com/{tenantid}/v2.0/.well-known/openid-configuration",
                new OpenIdConnectConfigurationRetriever(),
                new HttpDocumentRetriever());
            var config = await openidConfiguration.GetConfigurationAsync();

            var parameteres = new TokenValidationParameters()
            {
                RequireAudience = true,
                RequireExpirationTime = true,
                ValidateAudience = true,
                ValidateIssuer = true,
                ValidateLifetime = true,
                ValidAudiences = new[] { "<my client id or appId uri or resource identitifer>" },
                ValidIssuers = new[] { $"https://sts.windows.net/{tenantid}/" }, 
                IssuerSigningKeys = config.SigningKeys
            };
  • AppId URI,您可以从门户查看:参数:

添加以下内容,以检查Startup.csConfigureServices方法的更清晰描述性异常:IdentityModelEventSource.ShowPII = true

  • 范例:*
public void ConfigureServices(IServiceCollection services)
        {
            
                     ...
            IdentityModelEventSource.ShowPII = true;
                       ...
             }

参考:Azure AD - Why can't I validate JWT token issued by Azure AD for my Web API? Getting "IDX10516: Signature validation failed" error - Stack Overflow

相关问题