【问题标题】:IdentityServer4 without redirects没有重定向的 IdentityServer4
【发布时间】:2017-04-04 20:41:39
【问题描述】:

我正在实施 IdentityServer4 作为我的身份验证服务。

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

为了用户体验,我想让用户一直在我的页面上。所以这就引出了几个问题:

  1. 身份服务器 UI 是否可以显示在站点内的 DIV 或 iframe 中?我猜 iframe 有点不受欢迎?

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

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

【问题讨论】:

    标签: .net-core identityserver4


    【解决方案1】:

    用户体验问题取决于很多因素,用户体验必须考虑到安全因素。

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

    如果您不拥有客户端和/或不信任它的凭据,则不建议使用这种流程。想象一下,一个网站将他们的登录过程委托给 Google/Facebook 之类的东西......作为身份的所有者(Google/Facebook),您真的不希望您的客户将他们的密码输入到某些网站随机网站。相反,您将使用重定向流来呈现熟悉且受信任的 URL,客户会更乐意将其详细信息输入其中。

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

    【讨论】:

    • 如果您有多个客户端应用程序,这和 RO 不会给您 SSO。
    【解决方案2】:

    我已经看到配置为与 SPA 一起使用的 IdentityServer4 项目,尽管我并没有想到这里的所有细节。

    看看这篇documentation

    为用户定义基于浏览器的 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"
    } };
    

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

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多