外部会员提供商 Umbraco 13 的持久身份验证 Cookie

问题描述 投票:0回答:1

我通过扩展 Umbraco 文档上的示例,成功地在我的 Umbraco 网站上实现了完整的站点单点登录 (https://docs.umbraco.com/umbraco-cms/tutorials/add-microsoft-entra-id - 身份验证)。

我不想要的是必须向用户呈现登录屏幕,因为他们每次开始新会话时都必须手动单击“使用...登录”按钮。

在处理前端成员时,似乎没有与我在后台用户配置中拥有的 autoRedirect 选项等效的选项,所以我似乎无法做到这一点。

我正在尝试使本地身份验证 cookie 持久化,就像在非 Umbraco 登录页面添加“记住我”复选框一样。

似乎没有任何选项可以在 OnExternalLogin 中设置,即使是在 MemberExternalLoginProviderOptions 实例上设置的选项,并且似乎没有任何内容可以挂钩到配置 MemberAuthenticationBuilder 时设置的 OnTokenValidated 事件.

我尝试在 memberAuthenticationBuilder 上添加 .AddCookie() 方法,并按照我在其他帖子上看到的建议在 Program/Startup.cs 中配置应用程序时添加 services.ConfigureApplicationCookie() ,两者都设置为添加cookie 的到期时间,但无论我尝试什么,我仍然只是将身份验证 cookie 存储为会话 cookie。

有没有其他人尝试过这个,或者有人知道如何直接重定向到 OpenID 提供商(在我的例子中是 Entra),或者保留身份验证 cookie,以便我可以控制用户需要重新身份验证的频率?

我的最后一次尝试可能是一个非常老套的自动提交登录表单,因此用户仍然会被重定向到它,但是一些 JS 自动提交表单并将它们直接带到外部提供者,但我如果我能避免的话,我真的不想走这条路。

authentication cookies openid-connect umbraco
1个回答
0
投票

我发现从 UmbExternalLoginController 传递到 memberSignInManager.ExternalLoginSignInAsync 的硬编码“isPersistent”值始终为 false(大概是因为您希望 OIDC 服务提供商拥有身份验证令牌的生命周期)但是,其影响是,在单点登录解决方案中,用户的本地身份验证 cookie 会在会话结束时过期,并且在访问网站的非公共区域时始终会出现登录屏幕提示(在我的例子中是主页或任何后代),强制他们单击所选提供商的登录按钮以便提供商执行该身份验证仍然有效。

在我的实例中,最简单的解决方法是获取 UmbExternalLoginController 的代码,并将我的登录部分指向该自定义控制器。 在那里,我能够控制 isPersistent 标志,并且与我的 program.cs 中的 services.ConfigureApplicationCookie 调用相结合,足以让我控制本地身份验证 cookie 的生命周期。

© www.soinside.com 2019 - 2024. All rights reserved.