C# &引用;InvalidOperationException:IDX20803:无法从以下位置获取配置:';[PII隐藏]'&引用;

C# &引用;InvalidOperationException:IDX20803:无法从以下位置获取配置:';[PII隐藏]'&引用;,c#,docker,asp.net-core,identityserver4,C#,Docker,Asp.net Core,Identityserver4,我已经在Docker上部署了我的API和客户端应用程序,但就我而言,web应用程序无法调用API,我一直遇到一个异常 我在其他帖子中添加了以下建议行,但不起作用 IdentityModelEventSource.ShowPII = true; 例外情况: System.InvalidOperationException: IDX20803: Unable to obtain configuration from: '[PII is hidden]'. at Microsoft.Identity

我已经在Docker上部署了我的API和客户端应用程序,但就我而言,web应用程序无法调用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)

我们需要启用查看PII日志,以便查看有关错误的更多详细信息: 将ConfigureServices()中的以下行添加到Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    IdentityModelEventSource.ShowPII = true; //Add this line
    ....

启用TLS 1.2解决了该问题

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

如果这与使用“连接到云中的现有存储”即“Azure Active Directory B2C”的Visual Studio Web应用程序项目相关,则建议的配置不好

它还需要更改Azure中使用的userflow,如以下文章所述:

改变

"AzureAdB2C": {
  "Instance": "https://login.microsoftonline.com/tfp",
  "ClientId": "{clientId}",
  "Domain": "{tenant}.b2clogin.com",
  "SignUpSignInPolicyId": "{policy}"
}


如果有人在开发过程中遇到这种情况,我可以通过清除我的开发人员证书然后重新创建它们来解决这个问题

dotnet开发人员证书https--clean
dotnet开发人员证书https--信任

在我的例子中,这发生在我在本地主机环境下使用identity Server开发identity原型时,我的权限配置不正确

我遵循的是Identity Server 4的一个示例,问题是Identity Server 4的快速启动示例包含3个项目:

  • 身份服务器。具有端点=>
    https://localhost:5001
  • Api(称为资源Api或消费者Api)
  • 客户
在提供的示例中,Identity Server被设置为https,并带有端点。 但消费者Api中的权限设置为

所以,当客户端尝试连接到消费者Api时,它会获取地址并尝试查看,但这并不存在。它只存在于地球上

到目前为止还不错

解决方案是确保您在消费者授权机构上使用相同的identity server端点:

options.Authority = "https://localhost:5001";

解决方案相当棘手,我知道这是一个老问题,但上周我遇到了完全相同的问题,我花了很多时间来解决它。 此问题是因为客户端应用程序不信任API应用程序的Kestrel证书

在客户端应用程序的Dockerfile上,您应该添加类似的内容,以便将API应用程序上使用的证书添加到客户端的受信任CA

COPY ["API-KESTREL-CERTIFICATE.crt", "/usr/local/share/ca-certificates/"]
RUN update-ca-certificates
这里有一张大纸条!(至少在本地环境中)您应该关心API证书的域。在我的例子(本地环境)中,我必须创建一个多域证书,因为API的“localhost”与客户端应用的“localhost”不同,因为它们运行在不同的docker容器上。 话虽如此,对于API的Kestrel证书,我按照本指南创建了多个域自签名证书,并在DNS部分的.cnf文件上执行了类似的操作

DNS.1 = localhost
DNS.2 = host.docker.internal
最后,在客户端应用程序的权限范围内,确保正在寻址适当的域,并且应该正常工作


我希望有帮助

当identity server未运行时也可能发生此错误。

对于我来说,我启用了IdentityModelEventSource.ShowPII,并知道已知url不正确。
@Mentor的回答真的很有帮助。在Linux中,我尝试了所有建议的选项,但都没有成功,我必须做的是:

  • 为开发域生成免费证书
  • 使用lets加密文件生成pfx文件和密码:
    openssl pkcs12-export-out ca-bundle.pfx-inkey private-key.key-in ca-bundle.crt
  • 设置Kestrel以使用这些证书和密码。例如:
  • 完成

  • 我遇到了同样的错误,结果我忘了添加
    app.UseIdentityServer()
    StartUp.cs
    。将此方法添加到
    Cofigure()
    为我解决了这个问题

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           //other config
            app.UseIdentityServer();
        }
    

    很可能是您的权限配置不正确或无法连接到元数据终结点。您在哪里添加了ShowPII=true?@RuardvanElburg,我在'ConfigureServices'@RuardvanElburg中设置了它,问题是我的web ui应用程序无法调用API,因为API抛出了错误[PII是隐藏的],所以我添加了ShowPII=true,但仍然存在错误persists@RuardvanElburg在IDS项目中添加“ShowPII”后,我可以在日志中看到实际的错误,显然API无法访问配置文档。我从那里解决了这个问题。感谢您的帮助。这一行中提到的内容应该添加到Resource.API项目中(不在IDP项目中),请不要犯与我相同的错误:)您不需要删除/tfp吗?此“dotnet dev certs https--trust”在Linux机器或Azure上不起作用VM@HarounHajem我实际上运行Linux,它在我的机器上运行得很好。您可能必须安装该工具。哇,这是对我有用的答案!谢谢他谢谢你,先生,这仍然是真的,你让我免了很多头疼。即使经过40年的编码,有时仍然看不见树木:)谢谢你添加了这个吗?你能分享你使用的权威URL吗?我们有一个IdentityServer项目,所以它基本上就是那个项目的URL。。。URL取决于它是部署的还是仅为本地主机:
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           //other config
            app.UseIdentityServer();
        }