Azure AD 多租户应用程序不可预测的行为?

Azure AD multi-tenant app unpredictable behaviour?

我正在尝试在前端使用 Angular 和节点 + Azure MS SQL 分片数据库设计在 Azure AD 中构建可扩展的多租户 b2b SAAS。

我花了一周时间浏览 MS 文档和示例(tailspin、调查应用程序)并开始测试 angular7 应用程序中的多租户行为,该应用程序除了使用 adal-angular4 进行身份验证外别无其他我已经将其用于目前正在生产的 ~5 个其他项目。

到目前为止,我终其一生都无法弄清楚这种不可预测的行为背后的原因。我有 3 个租户:A - B - C

A 是开发人员租户 + 我的管理员帐户,B 是另一家公司的租户 + 我的普通用户帐户,C 是我个人帐户的 AD 免费层租户。

除了将多租户设置打开并将 Oauth2implicitflow 更改为 true 之外,我在开发人员 AD 上的 Azure AD 中对我的应用程序没有做任何其他操作。

我的问题是:

  1. 为什么还要让租户B登录?他们绝对没有被配置为能够访问它,并且在控制台上,tid 显然是第二个租户的意思(我认为)该帐户不是租户 A 上能够登录的访客。
  2. 我不知道为什么租户 C 在 Azure 端没有抛出任何错误,而是 returns 返回页面而没有实际登录。
  3. 关于租户可以注册应用程序,我是否缺少任何文档?我查看了 Tenant sign-up and onboarding article,但它并没有真正解决问题。

根据我阅读的文档,租户 B 和 C 尝试登录应用程序的行为毫无意义。

Why did it even let Tenant B to log into the app? They were definitely not provisioned to be able to access it and on the console the tid is clearly of the second tenant meaning (I think) that the account is NOT a guest on tenant A to be able to login.

当第一个用户同意权限(并且能够这样做)时,将在他们的租户中创建该应用程序的服务主体并登录。 这就是多租户应用程序设计的工作方式。 这意味着任何租户都可以登录您的应用程序。

您的应用后端需要检查用户的租户 ID 以查看他们是否是有效的租户 ID。你的前端当然也可以检查,虽然它不能代替后端检查。