【问题标题】:Method called when a user is authenticated用户通过身份验证时调用的方法
【发布时间】:2022-01-12 16:04:18
【问题描述】:

我们正在为第 3 方客户端运行带有 SAML2 身份验证的 Duende IdentityServer4(最新 IdentityServer4)。 我想要完成的是:

  • 用户已登录我们的 IdentityServer。
  • 当用户跳转到第三方客户端时,用户经过我们认证,用户名发送给客户端。
  • 就在发送用户名之前(身份验证之后),我需要检查该用户是否存在于客户端中。如果用户不存在,我会在经过身份验证的用户名发送回客户端之前创建它。

有没有办法做到这一点?

【问题讨论】:

    标签: identityserver4 duende-identity-server


    【解决方案1】:

    重要的是要意识到 IdentityServer 并不关心用户是如何进行身份验证的,而是由您决定,并且通常在 AccountController 中处理。下图是我的心智模型:

    因此,在您的情况下,我只需在用户登录之前在 AccountController 类中添加该检查。

    【讨论】:

    • 是的,我可以完全控制这种情况。当用户通过 SAML2 登录并从客户端进行身份验证时,就会出现问题。场景:用户已登录。用户单击链接到第 3 方客户端的按钮。第 3 方通过 SAML2 对用户进行身份验证以获取用户名 然后用户登录到第 3 方客户端。在将用户名发送回身份验证答案之前,我想确保该用户存在于客户端站点。
    • 我会添加一个大致如下的中间体: 1. 配置 SAML2 外部 IDP 以登录到临时外部 cookie 身份验证方案 2. 触发 SAML2 流时,确保重定向 URL(在 AuthenticationProperties 中)设置为中间操作的 URL 3. 在中间操作中验证临时外部方案,执行您需要的任何处理,然后通过重定向回原始 /connect/authorize URL 来继续
    • 另外,请查看 ExternalController.cs 类,因为该类是为使用第三方服务进行身份验证而定制的。
    • Hej Tommy,您是想让我澄清一下其他事情,还是对我的回答满意?
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多