编辑:更详细的解释
我们有以下设置:
NGINX反向代理设置为进行SSL卸载。全部内部 通信通过HTTP进行。重定向的设置就像 这样:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Original-For $proxy_add_x_forwarded_for;
proxy_set_header X-Original-Proto $scheme;
proxy_cache_bypass $http_upgrade;
IS4在app.UseIdentityServer
之前进行了以下设置 var fordwardedHeaderOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
};
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
app.UseForwardedHeaders(fordwardedHeaderOptions);
在客户端,RequireHttpsMetadata设置为FALSE
在IS4端,所有客户端都配置为具有" RedirectUris"和" PostLogoutRedirectUris"。
在客户端,IdentityServerAuthenticationOptions配置如下:
new IdentityServerAuthenticationOptions
{
Authority = "https://[OAUTH_ADDRESS]",
ApiName = "[API_NAME]",
ApiSecret = "[API_SECRET]",
RequireHttpsMetadata = false
}
实际发生的是,当我们尝试访问我们在IS4客户端中注册的一个并且请求被重定向到IS4进行身份验证时,我们有"未经授权的客户端"消息屏幕。此外,在检查重定向请求的查询字符串后,我们可以看到返回URL是HTTP而不是HTTPS。
请告知。
答案 0 :(得分:2)
Identity Server的发现端点的默认行为是使用该方案 (Http vs Https)来自对端点的请求。
由于您的身份服务器正在使用HTTP(因为它位于反向代理之后),因此它提供的端点信息也将使用HTTP。
您可以通过导航到http://[OAUTH_ADDRESS]/.well-known/openid-configuration
自行查看最新版本的Identity Server包含一个origin选项,允许您将基本URL强制为HTTPS。使用方法如下:
services.AddIdentityServer(options =>
{
options.PublicOrigin = "https://[OAUTH_ADDRESS]";
})
答案 1 :(得分:0)
您的设置可能会有所不同,但是如果您仍然使用身份服务器版本<2,我记得设置RequireHeaderSymmetry = false
对我们来说效果很好
var forwardOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
RequireHeaderSymmetry = false
};
forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
该问题也在here中进行了讨论