InvalidOperationException: IDX20803: 无法从 '[PII is hidden]' 获取配置。

87

我已经将我的API和客户端应用程序部署在Docker上,但是网站应用程序无法调用API,我一直收到异常。

我添加了其他帖子中建议的以下行,但并没有起作用。

IdentityModelEventSource.ShowPII = true;

异常:

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: '[PII is hidden]'.
at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
at IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationHandler.HandleAuthenticateAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.InvokeCore(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

3
很可能您的权限配置不正确或无法连接到元数据终点。 - juunas
2
你在哪里添加了ShowPII=true这一行? - user4864425
2
@RuardvanElburg,问题在于我的Web UI应用程序无法调用API,因为API抛出了错误[PII已隐藏],所以我添加了ShowPII=true,但错误仍然存在。 - Jane Senya
1
@RuardvanElburg 在 IDS 项目中添加了“ShowPII”后,它起作用了,我可以在日志中看到实际的错误,显然 API 无法访问配置文档。我能够从那里解决问题。感谢您的帮助。 - Jane Senya
我遇到了同样的错误。关键是,如果你先调用 app.MapControllers(); 然后再调用 app.UseSwagger(); 你会得到这个与PII无关的奇怪错误。所以,解决办法是交换顺序。祝你好运。 - undefined
显示剩余6条评论
21个回答

2

在我的情况下,我有一个预先创建的B2C实例和相关应用程序入口,然后创建了一个新的Web应用程序,并让VS通过新的Web应用程序Microsoft Identity Platform身份验证类型向导(这实际上非常好用)。默认的appsettings.json如下:

"AzureAd": {
"Instance": "https://xxxxxx.b2clogin.com/",
"Domain": "xxxxx.onmicrosoft.com",
"TenantId": "xxxxx",
"ClientId": "xxxxx",
"CallbackPath": "/signin-oidc",
"SignUpSignInPolicyId": "b2c_1_signin",
"SignedOutCallbackPath": "/signout/B2C_1_susi",
"ResetPasswordPolicyId": "b2c_1_reset",
"EditProfilePolicyId": "b2c_1_edit_profile",
"EnablePiiLogging": true},

只需要移除EnablePiiLogging这一行就可以解决它了。

1

对我来说,我启用了IdentityModelEventSource.ShowPII并发现著名的url是不正确的。这是@Mentor提供的非常有帮助的答案。


1

如果您使用自签名证书并将其导入到受信任的根证书中,那么它可能会被 Microsoft CAPI2 自动删除,从而导致 JWT 验证失败。

要么重新导入您的证书,要么在注册表中添加以下条目:

键:HKLM\Software\Policies\Microsoft\SystemCertificates\AuthRoot
名称:DisableRootAutoUpdate
值:1
类型:REG_DWORD


1
在我的情况下,我正在使用Azure AD身份验证,并且我的互联网没有连接,在连接互联网后,它又开始工作了。安心。

我遇到了相同的问题,但在我的情况下,我想处理这个异常,以便如果用户遇到身份验证问题,它会显示一个可读的消息。 - faye.babacar78

0
我遇到了同样的错误,后来发现我忘记在StartUp.cs中添加app.UseIdentityServer();。将此方法添加到Configure()中解决了我的问题。
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
       //other config
        app.UseIdentityServer();
    }

1
那个(东西)不存在了吗? - theonlygusti

0

在你的 CounfigurationAuth 方法中添加以下两行代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
IdentityModelEventSource.ShowPII = true;

对我来说它正常工作


0
我们在Azure App Service上遇到了这个错误。我们需要确保允许流量通过我们的Azure防火墙到达https://login.microsoftonline.com/端点。 我们的App Service配置为通过路由表将所有出站流量路由到VNet上的Azure防火墙。

0
在我们的情况下,我们在AzureAdB2C的SignUpSignInPolicyId策略属性的开发环境中有一个微服务配置不匹配。
所有微服务都在使用这个配置。
"AzureAdB2C": {
    "Instance": "https://ourawesometenant.b2clogin.com",
    "ClientId": "aa2cb23f-d25c-4c34-a7cc-847a2bf36377",
    "Domain": "ourawesometenant.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_Default",
    "AllowWebApiToBeAuthorizedByACL": true
  }

出现上述错误的那个配置与其他微服务的SignUpSignInPolicyId值不同。

"AzureAdB2C": {
    "Instance": "https://ourawesometenant.b2clogin.com",
    "ClientId": "aa2cb23f-d25c-4c34-a7cc-847a2bf36377",
    "Domain": "ourawesometenant.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_SignUp",
    "AllowWebApiToBeAuthorizedByACL": true
  }

确保所有微服务都具有相同的AzureAdB2C配置可以解决此错误。


0

在Linux中,我尝试了所有提出的选项,但都没有起作用,我需要做的是:

  1. 为开发域生成免费的Let's Encrypt证书,
  2. 使用Let's Encrypt文件生成pfx文件和密码:openssl pkcs12 -export -out ca-bundle.pfx -inkey private-key.key -in ca-bundle.crt
  3. 设置Kestrel使用这些证书和密码。像这些例子:Microsoft
  4. 完成

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接