Azure AD多租户应用程序的行为无法预测?

时间:2018-11-13 13:02:58

标签: active-directory azure-active-directory multi-tenant activedirectorymembership

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

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

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

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

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

  • 如果我使用租户A登录到应用程序,则一切正常,请在控制台中 可以在TID下看到租户A的GUID。

  • 如果我以租户B登录-第一次请求权限,然后让我进入(为什么?)。

  • 如果我使用Tenant C“工作”帐户登录,它不会抛出任何错误,不要求权限,无需实际登录即可返回页面,并且控制台上没有任何内容。
  • 如果我使用“租户C”“个人”帐户登录,它会告诉我该应用未配置租户live.com。

我的问题是:

  1. 为什么它甚至允许租户B登录到应用程序?他们绝对没有被允许访问它,并且在控制台上的提示显然是第二个租户(我认为),该帐户不是可以登录的租户A的访客。
  2. 我不知道为什么租户C不会在Azure方面抛出任何错误,而是直接返回页面而没有实际登录。
  3. 我是否缺少有关哪些租户可以注册到该应用程序的文档?我看过Tenant sign-up and onboarding article,但并没有真正解决问题。

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

1 个答案:

答案 0 :(得分:1)

  

为什么它甚至允许租户B登录到应用程序?他们绝对没有提供访问权限,并且在控制台上的提示显然是第二个租户(我认为),该帐户不是可以登录的租户A的访客。

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

您的应用后端需要检查用户的租户ID,以确保它们是有效的之一。您的前端当然也可以进行检查,尽管它不能代替后端检查。