我遇到的问题是当我尝试在使用SSL的IIS服务器上承载IdentityServer4的实现时。 (完全严格的SSL)将ASP.NET Core Module配置为使用https而不是http来承载IdentityServer 4
当在Kestrel上单独运行我的应用程序且SSL激活时,它工作正常,IdentityServer的IssuerUri
和Discovery Endpoints
使用SSL绑定。但是,当我将其托管在ASP.NET Core Module后面时,它将它托管在http://localhost:{random port}
上,而这又为IssuerUri
和Endpoints
生成了不是https的Identityserver。
我曾尝试没有成功如下:
确信,我必须为 HTTPS绑定的IIS网站上的有效证书,并取消了对端口绑定80
试图改变环境变量
ASPNETCORE_URLS
在web.config中 指向一个https地址。尝试在web.config中重写和重定向规则。
在我的启动类中查找
IISOptions
(由.UseIISIntegration()
使用) 的设置以绑定到特定的URL或更改协议。试图在IdentityServer4中找到类似
RequireSSL
(IdentityServer 3)或RequireHttpsMetadata
的设置。在启动类 的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();
}
你可以显示你的x -forwarded- * heades吗? – Tratcher
谢谢@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”],因此我将向他们解释如何最好地继续处理一个新问题。 –
在转发标题选项上禁用require标头对称性。你的原型和For具有不同数量的值。 – Tratcher