我有一个Azure web应用程序,通过Azure AD管理它的用户。我希望用户能够在我的Azure AD目录中注册创建一个帐户(自助服务),所以我给了应用程序对该目录的读写访问权限,并使用Graph API设置了一个页面来创建用户。
在此之前,一切都很好。但我现在的问题是,我想启用多租户,所以外部AD目录的用户可以登录到我的应用程序。这是有效的,但我需要登录作为一个管理员的帐户,因为它还要求读写访问他们的目录。
有办法解决这个问题吗?我只希望读写访问我的目录,能够创建用户帐户。我不想请求权限去触摸他们的目录,因为,很可能,他们不会信任我的应用。
谢谢。
我找到了一个快速而肮脏的解决方案:在Active Directory中添加另一个应用程序。这个应用程序应该是单租户,只有读写活动目录的权限。我们可以使用本应用的凭据访问Graph API,使用另一个应用的凭据对用户进行身份验证。
我等着看是否有人对这种情况有更好的解决方案…
很抱歉回复晚了。通常,在目录中创建对象的操作(如用户)需要管理员权限。此外,它看起来像你正在创建的web应用程序只使用应用程序的权限,这肯定需要管理员的同意。在多租户的情况下,同意租户的管理员必须是同意这种类型的应用程序的人——只有这个角色的人真正有权授予这种级别的访问权限。
希望有所帮助,
不需要使用第二个应用程序来代替身份验证角色——无论如何,这可能会对身份验证用户产生一些特殊的副作用,例如多余的/不完整的日志记录,角色不一致,以及丢失系统/内部引用。
您的应用程序(TenantID等)使用什么登录凭据?AD在凭证管理上非常严格,所以我会回到app结构。
在查询级别,您可以使所有表完全独立于每个租户,没有共享表数据,并包括一个多租户标识符列,这样如果您确定将多租户标识符作为显式变量包含,则没有人可以sql注入。
然后在实体模型中,您可以为每个人继承一个多租户接口,该接口引用租户标识符(作为EF的一部分)。
这样,负担被隔离到OAuth或其他库之上,以处理第三方身份验证。