在提出问题之前-我们该如何解决无限身份验证循环-有关体系结构的一些信息。
我们正在使用.net core 2.1。
我们有2个服务。第一个是面向公共流量的端口,执行TLS终止并确定是否应传递请求。 (也许到其他服务器)当该服务器确定对某个路径的请求时,它使用RunProxy
方法使用http将请求映射到“其他”服务。该代码如下所示:
app.MapWhen(<MatchRequestCondition>, proxyTime => proxyTime.RunProxy(
new ProxyOptions
{
Scheme = "http",
Host = "localhost",
Port = "1122"
}
));
例如,如果您访问https://localhost:1234/abc-这将被映射到http://localhost:1122-第二个应用程序所在的端口。
现在,此辅助服务使用OpenIdConnect-其配置如下所示。
// Configure Services method
services.AddMvc(mvcOptions => {
AuthorizationPolicy policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
mvcOptions.Filters.Add(new AuthorizeFilter(policy));
});
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(auth =>
{
auth.ClientId = "<client_id>";
auth.ClientSecret = "<client_secret>";
auth.Authority = "<authority>";
});
// Configure method
app.UseAuthentication();
在这里变得很有趣:
如果我直接访问第二个节点(仅用于接收来自第一个节点的流量),例如http://localhost:1122-我将重定向到登录状态,一切正常。
但是,如果我访问第一个节点(这是实际流量应来自的那个节点),则会进入疯狂的身份验证循环。
对可能是根本原因的任何想法?这与在常规服务之前安装负载平衡器有何不同?还是因为我在辅助服务中使用了cookie中间件?