授权错误:Cookie未通过身份验证。失败消息:取消保护票证失败

时间:2019-07-18 05:28:11

标签: asp.net-mvc docker authorization openshift adfs

我有以下代码:

services.AddAuthentication(sharedOptions =>
                {
                    sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
                })
                .AddWsFederation(options =>
                {
                    options.Wtrealm = Configuration["wtrealm"];
                    options.MetadataAddress = Configuration["wsfed"];
                    options.RequireHttpsMetadata = false;
                    options.UseTokenLifetime = false;
                })
                .AddCookie(cookieOptions =>
                {
                    cookieOptions.Cookie.HttpOnly = true;
                    cookieOptions.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                });

对于我的本地环境(Visual Studio,Kestrel Server),我在ADFS上设置了依赖方信任,并且还作为docker容器在本地运行,因此身份验证和授权可以完美地工作。

但是,当部署为在OpenShift中运行的docker容器时,身份验证和授权无法正常工作。

我收到以下错误:

Cookies was not authenticated.

当我尝试登录时,它重定向回应用程序的主页(不需要身份验证即可查看)。在ADFS中,它说检测到一个登录循环,看来应用程序尝试了多次尝试从ADFS中获取令牌(可能无法首先存储它接收到的令牌)。

我从ADFS获得了有效令牌,并尝试将应用程序卷曲在需要身份验证的网址上(将cookie作为Header传递),并且收到以下错误消息:

Cookies was not authenticated. Failure message: Unprotect ticket failed

任何人都可以分享一些有关我可以如何解决此问题的信息吗?

1 个答案:

答案 0 :(得分:0)

在花了更多时间调查使用Fiddler在两种环境下浏览器和应用程序之间的HTTP流量之后,我注意到当该应用程序在本地托管时,它使用路径/ signin-wsfed发出了一个额外的http请求,但没有这样做在Openshift中托管时调用。因此,这需要更改ADFS(应用程序回调端点)上的端点URL,以添加路径/ signin-wsfed。

为清楚起见,在本地运行时,无需指定此绝对路径,但它似乎是在新环境中运行的严格要求。