我实施IdentityServer4作为我的身份验证服务。
将使用它的客户端是一个Angular应用程序。从我看到的所有示例中,客户端被重定向到身份服务器上托管的页面,该页面在之后返回给客户端。
对于用户体验,我希望将用户始终保持在我的页面上。所以这导致了几个问题:
身份服务器UI可以显示在网站的DIV或iframe中吗?我猜猜iframe有点不受欢迎?
如果无法实现上述目标,是否可以在客户端应用程序上托管登录UI,而不是身份服务器?
我认为这对UX组来说更像一个问题,但我认为将用户留在网站中可以带来更好的用户体验而不是完全重定向?
由于
答案 0 :(得分:6)
UX问题取决于许多方面,并且必须通过安全考虑来缓和UX。
如果您完全拥有客户端和身份服务器,则可以使用不涉及重定向的ResourceOwnerPasswordFlow
,并允许您的客户端使用用户名/密码并使用它们获取访问令牌。
如果您不拥有客户端,并且/或者不信任凭据,则不建议使用此类流程。想象一下网站将他们的登录过程委托给谷歌/ Facebook这样的情况......作为您真正的身份所有者(Google / Facebook)不希望您的客户输入他们的密码随机网站。相反,您将使用重定向流来呈现熟悉且可信的URL,客户可以更乐意输入其详细信息。
所以重定向的问题不是一个简单的'它给出了糟糕的用户体验',因为在许多情况下,如果它带来增强的安全感,那么涉及重定向是更好的用户体验。
答案 1 :(得分:0)
我已经看到IdentityServer4项目被配置为与SPA一起使用,虽然我没有把所有细节都放在我的头顶。
的这一部分为用户定义基于浏览器的JavaScript客户端(例如SPA) 身份验证和委托访问以及API此客户端使用so 调用隐式流来请求身份和访问令牌 JavaScript的:
var jsClient = new Client { ClientId = "js", ClientName = "JavaScript Client", ClientUri = "http://identityserver.io", AllowedGrantTypes = GrantTypes.Implicit, AllowAccessTokensViaBrowser = true, RedirectUris = { "http://localhost:7017/index.html" }, PostLogoutRedirectUris = { "http://localhost:7017/index.html" }, AllowedCorsOrigins = { "http://localhost:7017" }, AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile, IdentityServerConstants.StandardScopes.Email, "api1", "api2.read_only" } };
您可以看到所有重定向都返回到相同的网址。据推测,您的路由将从那里接管。