我收到“发行人名称与授权不匹配”错误,因为我的is4服务前有一个ssl终止负载均衡器(即发行人为https://myurl,授权为http://myurl)。
在这种情况下我该怎么办? dns名称相同,是https中的s导致验证失败!
答案 0 :(得分:1)
您的颁发者和授权机构可能会有所不同,但需要更改服务器的配置和发现请求。
在Identity Server的启动方法上,可以设置颁发者:
var tabCounter = 0;
var tabTitle = $( "#tab_title" )
var tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>"
var tabs = $("#tabs").tabs();
$(function() {
$("#saveTable").click(function(){
addTab();
});
});
function addTab() {
tabCounter++;
var label = tabTitle.val() || "Tab" + tabCounter,
id = "tabs-" + tabCounter,
li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) ),
tabTableHtml = "<table id=\"resultTable-" + tabCounter + "\"></table>"
tabs.find( ".ui-tabs-nav" ).append( li );
tabs.append( "<div id='" + id + "'>" + tabTableHtml + "</div>" );
tabs.tabs( "refresh" );
}
然后在您的发现文档请求中:
var identityServerBuilder = services.AddIdentityServer(options =>
{
if (Environment.IsDevelopment())
{
options.IssuerUri = $"http://myurl:5000";
}
else
{
options.IssuerUri = $"https://myurl";
}
})
答案 1 :(得分:0)
您的发行者URL为https
,但是授权URL为http
。这两个网址应该完全相同。
否则,您可以尝试将ValidateIssuerName
属性设置为false。此属性决定issuer
的名称是否必须与authority
相同。默认情况下为true-
var discoRequest = new DiscoveryDocumentRequest
{
Address = "authority",
Policy = new DiscoveryPolicy
{
ValidateIssuerName = false,
},
};
答案 2 :(得分:0)
identityserver4 gitter上来自mackie1001的答案
您的负载均衡器应按原始协议(X-Forwarded-Proto)转发,您可以使用它来设置当前请求方案以匹配传入请求 您只需要创建一个中间件功能即可 阅读以下内容:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.0
作为参考,这是我添加到启动中的代码:-
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedProto
});
非常感谢mackie1001!
答案 3 :(得分:0)
如果使用nginx作为负载均衡器,则可能在服务配置中需要它...
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
// Only loopback proxies are allowed by default.
// Clear that restriction because forwarders are enabled by explicit
// configuration.
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
然后在身份服务器中间件之前添加此中间件
app.UseForwardedHeaders();