我正在构建一个多租户Service Fabric应用程序,它允许租户指定登录类型-Identity(asp.net)/ Azure AD。
我有一个身份验证服务,该服务检查用户链接到哪个租户,然后继续检查用户的username:password是否有效,如果有效,它将JWT令牌返回到网关API / Web API,然后允许访问群集中的其余服务。
通过限制动作和数据访问等角色进一步确保了这一点。
问题1 如果租户使用天蓝色广告,保存该租户给出的应用程序ID和机密的安全方法是什么? 在我的数据库中并对信息进行加密,必须将其解密才能连接到AD(试图保持动态)。
问题2 我正在实现自己的滑动刷新令牌,以便在过期后获得新的JWT,是否有更好/标准的方法?
问题3 是否有更好/标准的方法来处理此多租户登录过程。
问题4 是否有一种方法可以在JWT主题上设置可选的声明,如果声明值不正确,该声明将允许访问共享服务但阻止访问特定于租户的服务?
修改 理想情况下,角色不应成为租户AD / B2C的一部分,因为它们的角色是动态的,并且可以在应用程序内部进行管理。
答案 0 :(得分:1)
与其建立自己的STS逻辑,不如查看IdentityServer,这是一种流行且出色的OSS工具。
例如,看看here,了解使用asp.net核心的多租户示例。
它支持通过实现Profile Service向令牌添加自定义声明。可以将服务配置为对authorization使用声明。
This blog post也可能有用。
答案 1 :(得分:1)
我将强烈建议您使用Azure租户模型,并让Azure AD管理所有凭据和身份验证。在当今世界,当有大量身份提供者可用时,存储和管理用户凭据是一个非常糟糕的主意。
推荐阅读:
免责声明:我为Microsoft工作