【问题标题】:IdentityServer4 Add Tenant Claim after AuthenticationIdentityServer4 在身份验证后添加租户声明
【发布时间】:2018-08-02 20:11:45
【问题描述】:

我有一个多租户场景,其中一封电子邮件可以与多个租户相关联。

因此,我配置了一个自定义的 AccountChooserResponseGenerator,它继承自内置的 AuthorizeInteractionResponseGenerator 类。

用户进行身份验证后,UI 会正确地将用户转到帐户选择器视图,该视图列出了与电子邮件地址关联的租户。这个想法是用户现在必须选择他/她想要登录的租户,然后被重定向到该租户的 URI。

但我的问题是,我不知道如何在选择租户后将该租户 ID 作为声明添加到从 IdentityServer 传递给应用程序的令牌中(多个租户可以共享相同的 URL,所以我需要令牌中的某些内容来了解​​哪个租户具有上下文)。

所以在AccountChooserController.TenantSelected(long tenantId) 方法中,我希望能够将这个tenantId 添加到用户声明中,但它似乎不受支持。

请告知这是否可行,如何实现?

【问题讨论】:

    标签: identityserver4


    【解决方案1】:

    在调用 SignInAsync 时将租户信息放入 cookie - 然后您可以从您的配置文件服务中检索它。

    【讨论】:

    • 谢谢,但我的问题是用户首先使用他们的电子邮件和密码登录,然后才能向用户显示他们的电子邮件链接到的租户列表。因此,当租户列表显示时,SignInAsync 已经发生。
    • 啊等等……我想我从你的回答中得到了一个想法……也许在提供了他们的凭据之后,我的 IdentityServer 不应该调用SignInAsync,而是使用这些凭据来提供列表租户...然后在用户选择租户后,才调用SignInAsync(或者可能再次调用它)...我会做一些弄清楚。谢谢。
    • 不,不能让它工作。我需要致电SignInAsync,然后才向用户提供他/她的关联租户列表以登录。这是因为,在没有登录到租户的情况下,将在 IdentityServer 应用程序中启用一些功能(配置文件管理等),而无需选择租户。请告知如何在用户登录后添加租户信息?
    • @ShawndeWet 我认为您可以在用户首次登录时使用临时 cookie 身份验证。为了保护配置文件管理,您使用此临时身份验证方案并且当用户选择租户时,您可以调用 SignInAsync 进行 IdentityServer 默认身份验证计划。
    • 嗯,确实,在这里找到了它:github.com/aspnet/Identity/issues/852 CheckPasswordSignIn 就是这样做的 - 检查凭据是否有效,但不会进行完整的登录。
    猜你喜欢
    • 2020-04-21
    • 2021-03-24
    • 2021-01-11
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多