0

我们已经使用 IdentityServer4 实现了一个身份服务器并将其部署到 AWS。在我们在 ELB 上启用 https 之前,它运行良好。现在,当客户端尝试进行身份验证时,我们会收到以下错误:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0]
  An unhandled exception has occurred while executing the request
System.InvalidOperationException: IDX10803: Unable to obtain configuration from: 'https://int.mycompany.com/.well-known/openid-configuration'. ---> System.ArgumentException: IDX10108: The address specified is not valid as per HTTPS scheme. Please specify an https address for security reasons. If you want to test with http address, set the RequireHttps property  on IDocumentRetriever to false.

从我读到的内容来看,客户对证书不满意。这可能与身份服务器的主机名和证书中的名称有关。我们有一个主题为“*.mycompany.com”的有效通配符证书。我们将具有权限的客户端配置为“ https://int.mycompany.com ”,因此这似乎是一致的。

我还在这些负载平衡配置中读到了一些标头必须转发到中间件,但我不确定这将如何工作。

4

1 回答 1

0

看起来 HTTPS 请求无法被识别。尝试将以下设置添加到类ConfigureServices中的方法中Startup

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
});

来自HTTP 标头和 Elastic Load Balancing AWS 文档:

X-Forwarded-Proto 请求标头可帮助您识别客户端用于连接到您的服务器的协议(HTTP 或 HTTPS)。您的服务器访问日志仅包含服务器和负载均衡器之间使用的协议;它们不包含有关客户端和负载均衡器之间使用的协议的信息。要确定客户端和负载均衡器之间使用的协议,请使用 X-Forwarded-Proto 请求标头。Elastic Load Balancing 将客户端和负载均衡器之间使用的协议存储在 X-Forwarded-Proto 请求标头中,并将标头传递给您的服务器。

于 2016-10-02T05:37:06.133 回答