.net 核心中的混合身份验证 API

Mixed Authentication in .net core API

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

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

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

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

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

问题 3 有没有 better/standard 方法来处理这个多租户登录过程。

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

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

与其构建自己的 STS 逻辑,不如看看 IdentityServer,一个流行且出色的 OSS 工具。

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

它支持通过实现 Profile Service. Services can be configured to use claims for authorization.

向令牌添加自定义声明

This blog post 也可能有用。

我强烈建议您使用 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
  5. 中使用 roles and groups
  6. 在某种程度上 can be customized 发行的代币中的索赔。

免责声明:我在 Microsoft 工作