当与子应用程序共享基于声明的经过身份验证的用户时,Kentico 表单身份验证 cookie 不持久

时间:2021-05-19 22:22:01

标签: asp.net authentication cookies owin kentico

我正在处理我们的 CMS(Kentico 11,门户引擎)和使用 Auth0 进行身份验证的新 AMS 之间的 sso。在使用多种不同的方法直接集成自定义外部身份验证都没有成功之后,我用这种方法取得了重大进展:

  1. 在此处创建基于 Auth0 ASP.NET(OWIN) 快速入门的独立 MVC 应用程序:https://auth0.com/docs/quickstart/webapp/aspnet-owin - sso 在此处正常工作

  2. 将此应用程序配置为 Kentico 站点的子应用程序 - 这需要在 Kentico 网络配置中添加一些位置标记,以便 MVC 应用程序不会继承大部分设置

  3. 将 Kentico 应用程序配置为能够从子应用程序识别经过身份验证的用户 - 这需要将相同的机器密钥添加到两个应用程序的 Web 配置中,并将 Startup.Auth.cs 类添加到 Kentico具有与 MVC 应用程序相同的 cookie 身份验证代码的应用程序

最终,正确的重定向将连接到正确的全局身份验证事件,但目前我主要在测试页面的上下文中工作,流程如下:

  1. 加载页面时,如果用户未登录,他们将被重定向到 MVC 应用程序中的登录操作(然后重定向到 Auth0)。

  2. 成功登录到 Auth0 后,用户被重定向回 MVC 应用程序中的本机回调,该应用程序处理令牌交换和设置声明,然后最终重定向回 Kentico 站点上的测试页面。到目前为止,一切都很好,因为此时 Kentico 站点正确识别了经过身份验证的用户和来自子 MVC 应用的声明。

  3. 通过用户名检查现有的 Kentico 用户(我们将使用外部 AMS ID 作为用户名)。如果用户存在,更新姓名和电子邮件;否则,创建一个新用户并相应地设置信息。然后使用 AuthenticationHelper.AuthenticateUser("username", true);

    以编程方式将用户登录到 Kentico 站点

这起初似乎有效 - 如果我在登录后立即在同一页面上检查当前 Kentico 用户,他们会被正确识别。但是,如果我导航到另一个页面,Kentico 用户就会丢失,这似乎是因为 AuthenticationHelper.AuthenticateUser 方法设置的 .ASPXFORMSAUTH cookie 没有持久化。

这是我目前在 Kentico Startup.Auth.cs 文件中的代码:

            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
                LoginPath = new PathString(MVCLoginURL),
                CookieSameSite = SameSiteMode.Lax
            });

当我将其注释掉并尝试以编程方式将特定用户登录到我的测试页面时,这会按预期工作 - .ASPXFORMSAUTH cookie 仍然存在,并且 Kentico 用户继续在其他页面上被识别。

任何帮助识别冲突或如何使这两组 cookie 很好地协同工作的帮助都非常感谢。我对 Auth0、OWIN 和 OpenID 非常陌生,我意识到 Kentico Portal Engine 已经过时了,我们不会支持它太久,但现在我需要在我们现有的站点上进行这项工作。谢谢!

0 个答案:

没有答案
相关问题