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

时间:2020-02-27 18:05:17

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

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

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

通过限制动作和数据访问等角色进一步确保了这一点。

问题1 如果租户使用天蓝色广告,保存该租户给出的应用程序ID和机密的安全方法是什么? 在我的数据库中并对信息进行加密,必须将其解密才能连接到AD(试图保持动态)。

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

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

问题4 是否有一种方法可以在JWT主题上设置可选的声明,如果声明值不正确,该声明将允许访问共享服务但阻止访问特定于租户的服务?

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

2 个答案:

答案 0 :(得分:1)

与其建立自己的STS逻辑,不如查看IdentityServer,这是一种流行且出色的OSS工具。

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

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

This blog post也可能有用。

答案 1 :(得分:1)

我将强烈建议您使用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发行的代币中提出索赔。

免责声明:我为Microsoft工作