2017-02-08 63 views
1

我遇到的问题是当我尝试在使用SSL的IIS服务器上承载IdentityServer4的实现时。 (完全严格的SSL)将ASP.NET Core Module配置为使用https而不是http来承载IdentityServer 4

当在Kestrel上单独运行我的应用程序且SSL激活时,它工作正常,IdentityServer的IssuerUriDiscovery Endpoints使用SSL绑定。但是,当我将其托管在ASP.NET Core Module后面时,它将它托管在http://localhost:{random port}上,而这又为IssuerUriEndpoints生成了不是https的Identityserver。

我曾尝试没有成功如下:

  1. 确信,我必须为 HTTPS绑定的IIS网站上的有效证书,并取消了对端口绑定80

  2. 试图改变环境变量ASPNETCORE_URLS在web.config中 指向一个https地址。

  3. 尝试在web.config中重写和重定向规则。

  4. 在我的启动类中查找IISOptions(由.UseIISIntegration()使用) 的设置以绑定到特定的URL或更改协议。

  5. 试图在IdentityServer4中找到类似RequireSSL(IdentityServer 3)或 RequireHttpsMetadata的设置。

  6. 在启动类 的IdentityServer选项中更改了IssuerUri,希望它也可能更新其他端点。

我可能错过了一件非常明显的事情,但现在我不知道这可能是什么。

来自社区的任何帮助,将不胜感激:-)

Program.cs中的代码

public static void Main(string[] args) 
    { 
     Console.Title = "IdentityServer"; 

     var config = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddJsonFile("kestrelHosting.json", optional: true) 
      .AddCommandLine(args) 
      .Build(); 

     var host = new WebHostBuilder() 
      .UseConfiguration(config) 
      .UseKestrel(options => 
      { 
       // options.ThreadCount = 4; 
       options.NoDelay = true; 
       options.UseHttps("VismaCert.pfx", "Visma123"); 
       //options.UseConnectionLogging(); 
      }) 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 

回答

0

AspNetCoreModule是SSL终结,也不会与红隼通过HTTPS通信。它的功能是通过头部转发原始方案,以便在生成网址/链接时使用它。有一个ForwardedHeaders中间件默认包含了UseIISIntegration,它将把这些头文件应用到请求字段。但是,有些情况下标题无法通过默认设置进行处理。这里有大量的参考文献:https://github.com/aspnet/Docs/issues/2384

+0

你可以显示你的x -forwarded- * heades吗? – Tratcher

+0

谢谢@Tratcher的回应。在遵循您的链接并在ARR中添加响应标头后,我现在可以获得以下内容。 “X-FORWARDED-HOST:xxxxxxxx.xxx.xxx”,“X-FORWARDED-SCHEMA:https”,“X-FORWARDED-PROTO:https,http”和“X-Forwarded-For:xx.xx.x.xx :XXXXXX”。不幸的是,身份服务器似乎没有选择这些更改,而是读取HttpContext.Request.Schema,而不是检查请求。已经为它的BaseUrlMiddleware设置了一个值为https的标头[“X-Forwarded-Proto”],因此我将向他们解释如何最好地继续处理一个新问题。 –

+0

在转发标题选项上禁用require标头对称性。你的原型和For具有不同数量的值。 – Tratcher

相关问题