使用RunProxy和OpenIdConnect时的无限身份验证循环

时间:2019-03-06 11:01:52

标签: asp.net-core asp.net-authentication

在提出问题之前-我们该如何解决无限身份验证循环-有关体系结构的一些信息。

我们正在使用.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中间件?

0 个答案:

没有答案