没有重定向的IdentityServer4

ADr*_*ger 7 .net-core identityserver4

我正在将IdentityServer4用作身份验证服务。

将使用此客户端的是Angular应用程序。从所有示例中,我已经看到客户端被重定向到身份服务器上托管的页面,该页面之后将返回给客户端。

为了获得用户体验,我希望一直将用户保持在我的页面上。因此,这引出了两个问题:

  1. 身份服务器UI可以显示在站点的DIV或iframe中吗?我猜iframe有点皱眉?

  2. 如果上述方法不可行,是否可以在客户端应用程序而非身份服务器上托管登录UI?

我想对于UX小组来说,这更是一个问题,但我会认为,将用户留在站点中会带来更好的用户体验,而不是完全重定向他们?

谢谢

Mas*_*ton 7

UX问题取决于许多因素,并且必须考虑安全性来限制UX。

如果您完全拥有客户端和身份服务器,则可以使用ResourceOwnerPasswordFlow不涉及重定向的,并允许客户端获取用户名/密码并使用它们获取访问令牌。

但是,如果您不拥有客户端和/或不使用凭据信任它,则不建议使用这种流程。想象一下这样一种情况,一个网站将其登录过程委托给Google / Facebook之类的身份...作为身份(Google / Facebook)的所有者,您确实不希望您的客户在某个随机网站中输入密码。取而代之的是,您将使用重定向流来呈现一个熟悉且受信任的URL,客户将更愿意在其中输入其详细信息。

因此,重定向的问题不是一个简单的“给用户带来糟糕的用户体验”,因为在很多情况下,如果重定向带来了增强的安全感,那么它是一个更好的用户体验。


Jim*_*nts 0

我见过配置为与 SPA 一起使用的 IdentityServer4 项目,尽管我不知道这里的所有细节。

查看这段文档

定义基于浏览器的 JavaScript 客户端(例如 SPA)以进行用户身份验证、委托访问和 API 该客户端使用所谓的隐式流程从 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"
} };
Run Code Online (Sandbox Code Playgroud)

您可以看到所有重定向都返回到同一 URL。据推测,您的路由将从那里接管。