【问题标题】:Mixed Authentication in .net core API.net 核心 API 中的混合身份验证
【发布时间】:2023-03-11 04:22:02
【问题描述】:

我正在构建一个多租户 Service Fabric 应用程序,它允许租户指定登录类型 - Identity(asp.net)/Azure AD。

我有一个身份验证服务,它检查用户链接到哪个租户,然后继续检查用户的用户名:密码是否有效,如果有效,它会向网关 API/Web API 返回一个 JWT 令牌,然后允许访问集群上的其余服务。

这由角色进一步保护以限制操作和数据访问等。

问题 1 如果租户使用 azure AD,那么保存该租户提供的应用程序 ID 和密码的安全方法是什么? 在我的数据库中并加密信息,它必须被解密才能连接到 AD(试图保持动态)。

问题 2 我正在实现自己的滑动刷新令牌以在过期后获取新的 JWT,是否有更好/标准的方法?

问题 3 是否有更好/标准的方法来处理这个多租户登录过程。

问题 4 有没有办法在 JWT 主题上设置可选声明,允许访问共享服务,但如果声明值不正确,则阻止访问租户特定服务?

编辑 理想情况下,角色不应成为租户 AD/B2C 的一部分,因为它们的角色是动态的,并且在应用程序内进行管理。

【问题讨论】:

    标签: .net-core jwt azure-active-directory azure-service-fabric asp.net-core-identity


    【解决方案1】:

    不要构建您自己的 STS 逻辑,而是看看 IdentityServer,这是一个流行且出色的 OSS 工具。

    例如,查看here 以获取使用 asp.net 核心的多租户示例。

    它支持通过实现Profile Service 向令牌添加自定义声明。可以将服务配置为使用 authorization 的声明。

    This blog post 也可能有用。

    【讨论】:

    • 感谢 LoekD,如果这有帮助,我会看看并投票。正如我查看过 identityServer 但无法完全理解它,因为 JWT 总是由我的身份验证服务生成,而不是由 AZure AD 或 asp.net Identity 生成
    【解决方案2】:

    我强烈建议您使用 Azure 租户模型,让 Azure AD 管理所有凭据和身份验证。在当今世界,当有大量可用的身份提供者时,存储和管理用户凭据是一个非常糟糕的主意。

    推荐阅读:

    1. How to build a multi-tenant app with Azure AD
    2. 如何secure a Web API with Azure AD
    3. 像 MSAL.NET 这样的库会自动manage token caches and refreshes
    4. 在 Azure AD 中使用 roles and groups
    5. 在一定程度上对can be customized 发行的代币进行索赔。

    免责声明:我为微软工作

    【讨论】:

    • 我遇到的问题是,用户管理然后落入应用程序的主机而不是租户,如果我错了,请纠正我,但如果租户(组织)没有Azure AD 帐户,我将为他们创建一个 B2C,而这又需要主机来管理?
    • 此外,在角色方面,在存在静态系统角色和每个租户的动态角色的场景中,是否也需要由 AD 管理?
    • 因此,ISV 为尚未拥有 Azure AD 租户的客户管理租户是很常见的。这是一件复杂而令人沮丧的事情,但差距正在缩小,希望在不久的将来不再是问题。您可以使用 B2C,但 B2C 仍然不支持角色,因此在您的规划中考虑这一事实。 Azure AD 中没有“动态角色”之类的东西。我认为您指的是“动态组”。组和角色在 Azure AD 中是非常不同的东西,请参考这个稍微过时的recorded session 了解
    • 在我的范围内,角色将与内置身份角色在同一行,然后将其构建到声明中以确定用户是否有权访问资源。
    • 请完成我推荐的课程。角色在different Microsoft 产品中具有不同的含义。我建议你把它们都钓一次:)
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多