使用多租户 Azure AD SSO (Open ID Connect) 识别和过滤租户

Identifying and filtering tenants using multi-tenant Azure AD SSO (Open ID Connect)

我们有一个由非 Azure 提供商托管的 SaaS Web 应用程序。目前用户通过内置的个人用户帐户访问它,但我们正在通过 Azure AD (Open ID Connect) 实施多租户 SSO。这里的目的是让每个组织(使用 Azure AD)订阅我们的 Web 应用程序以允许他们的用户登录。

我现在正在尝试了解如何过滤和匹配来自具有订阅的组织的用户。

据我所知,租户 ID 似乎是给定组织的关键标识符,验证令牌发行者是开始限制非订阅组织的地方。看来我可以从声明中获取租户 ID (http://schemas.microsoft.com/identity/claims/tenantid),这意味着我可以在代码中验证租户。所以我的简单方法是存储订阅的租户 ID 列表并在登录过程中匹配它们。

所以这是我的问题:

  1. 我是否需要每个组织都向我提供他们的租户 ID,以便我可以保留一个列表以在登录过程中进行匹配?
  2. 如果是,租户 ID 是否属于敏感信息?
  3. 有没有办法在 Azure AD 门户本身中管理订阅组织或租户 ID 的列表,这样我就不需要在代码中对其进行过滤?

提前致谢。

Whosebug 中有很多与 Azure AD 中的多租户相关的问题,但 none 解决了租户 ID 的管理问题。对我来说,有一个明显的问题,例如“很好,我们有超过 1000 个使用 Azure AD 的客户,并且想在我们的应用程序中使用 SSO。我可以很好地猜测他们的域是什么,但租户 ID 是正确管理访问权限所需的真正唯一标识符。那么我如何切实地从 1000 多个客户那里获得它,并且这个信息敏感吗?

Microsoft 文档总是对租户 ID 的插图进行编辑,因此您可能认为这是敏感信息,但我发现 publicly 很容易获得。您只需将以下 URL 复制到浏览器中,您就会看到租户 ID:

https://login.microsoftonline.com/[your-tenant's-domain]/.well-known/openid-configuration

所以对于任何感兴趣的人,这里是我自己的问题的答案:

  1. 我是否需要每个组织向我提供他们的租户 ID,以便我可以保留一个列表以在登录过程中进行匹配?是的,更好,因为租户 ID 是唯一的,但是如果您确信租户的 public 域与他们在 Azure AD 中使用的域相同,那么您可以使用上述方法获取租户 ID。

  2. 如果是这样,租户 ID 是否属于敏感信息? 鉴于上述查找租户 ID 的简单方法,希望不是!

  3. 有没有办法在 Azure AD 门户本身中管理订阅组织或租户 ID 的列表,这样我就不需要在代码中对其进行过滤? 是的。它称为租户限制,是一个完美的解决方案,但只有在 Azure AD 中拥有 Premium 1 许可证才能使用它,该许可证等于 $$$(请参阅 https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/tenant-restrictions)。