我正在使用 Thinktecture.IdentityServer.v2 应用程序为几个内部应用程序执行 SSO,但希望为每个应用程序自定义登录页面以获得更流畅的用户体验。我似乎找不到办法做到这一点。
登录页面是否可以根据客户端来自的源应用程序进行自定义?
我正在使用 Thinktecture.IdentityServer.v2 应用程序为几个内部应用程序执行 SSO,但希望为每个应用程序自定义登录页面以获得更流畅的用户体验。我似乎找不到办法做到这一点。
登录页面是否可以根据客户端来自的源应用程序进行自定义?
“我似乎找不到办法做到这一点。” - 你努力了多少?;)
RP 具有额外的数据字段 - 因此您可以像 CSS 名称一样挂在注册数据库中的 RP 上。此外,您可以从登录页面获取该 RP 数据 - 引用 AccountController 中的评论:
// 您可以调用 AuthenticationHelper.GetRelyingPartyDetailsFromReturnUrl 来获取有关请求的依赖方的更多信息
顺便说一句 - IdentityServer 的 github repo 有一个问题跟踪器 - 你应该用它来提问。
您始终可以让 RP 传递一个自定义查询字符串参数并对其进行自定义。但是此时您已经超出了 WS-Federation 的范围。另外,您必须考虑 SSO 的性质——用户真正登录的是 IdP,而不是应用程序。因此,将 IdP 更改为看起来像应用程序有点虚伪。
我已经通过自定义SignIn.cshtml以将样式调整为我需要的方式解决了这个问题。此外,我在SignIn.cshtml的顶部有服务器端代码,它在 ReturnUrl ( Request.QueryString["ReturnUrl"]
)上进行一些字符串匹配。然后我根据我知道对于不同 RP url 是唯一的一些值显示不同的徽标和标题文本。
升级到 ThinkTecture MVC 的新版本时,只需将此文件更新为您的具体情况(只需记住在升级之前拥有修改后的SignIn.cshtml的副本)将是一项小工作。