我们的应用程序(以下称为“XYZ_App”)是一个多租户 SaaS 应用程序。我们正在将其作为多租户“Web 应用程序/API”(以下称为“AppSourceXYZ_App”)提供给 Microsoft AppSource。
当需要/需要多租户时,我们开始我们的 OpenID Connect 实施,端点指向“common”,如文档中所述。
在 XYZ_App 中,我们在系统中添加了信息以了解每个 XYZ_App 租户与哪个 AAD 实例相关联(使用 Microsoft 分配给此 AAD 实例的 GUID,我们没有使用“rename-safe.onmicrosoft.com”表示)。
当使用“通用”端点时,我们必须从 JWT 手动验证颁发者,以确保它是预期的:用户可以访问 XYZ_App 请求访问与 contoso.onmicrosoft.com 关联的 XYZ_App 租户,然后定向到“登录” .microsoftonline.com/common”进行身份验证,然后决定使用来自另一个 AAD 实例(以下称为“anotherAADInstance.onmicrosoft.com”)的用户进行身份验证。在这种情况下,即使用户可以在 anotherAADInstance.onmicrosoft.com 上成功进行身份验证,XYZ_App 的重定向 URI 也必须确保 JWT 颁发者是来自 contoso.onmicrosoft.com 的颁发者。我将此设置称为 Scenario_1。
考虑到这种情况,我们考虑过不使用“common”并即时自定义访问 login.microsoftonline.com 的请求;试图“监禁”强制对特定 AAD 实例进行身份验证的请求。我们仍然需要在重定向 URI 中执行验证,以确保发布者是合适的,但我们认为这种方法可能会让我们的生活更轻松。我将此设置称为 Scenario_2。
您认为 Scenario_2 从长远来看是可行的还是过于短视?根据我目前对 OpenID Connect 的了解,我可以看到 Scenario_2 的一个限制是,在我们的应用程序中支持“代理帐户”会变得有问题。
“经纪人账户”的解释:在我们的行业中,允许一些外部用户访问系统。假设我有一家名为“BrokerCo”的公司(拥有自己的 brokerco.onmicrosoft.com AAD 实例),该公司有 2 名员工:Broker1 和 Broker2。另一个 AADInstance 和 contoso 都聘请了 Broker1 和 Broker2 来获取代理服务以在 XYZ_App 中执行任务;要求 XYZApp 授予他们访问权限。从 OpenID Connect 的角度来看,理想的身份验证方式是什么?如果 XYZ_App 使用“login.microsoftonline.com/common”进行身份验证(如 Scenario_1;与 Scenario_2 中的“监禁”访问相反),Broker1 和 Broker2 可以通过 brokerco.onmicrosoft.com 进行身份验证(没有 AAD“外部用户" 对于另一个 AADInstance 或 contoso),
您有解决此问题的建议或指示吗?
背景上下文:在使用 OpenID Connect 发行者时,我收到以下错误消息:AADSTS50020:来自身份提供者的用户帐户 'testuser@anotherAADInstance.onmicrosoft.com' https://sts.windows.net/XXXXXXXX-fake-GUID- 9bZZ-XXXXxxxxXXXX/ '在租户 'XYZ Publisher' 中不存在,并且无法访问该租户中的应用程序 'YYYYYYYY-fake0-GUID-YYYYyyyyYYYY'。需要先将该帐户添加为租户中的外部用户。注销并使用不同的 Azure Active Directory 用户帐户重新登录。
提前致谢 !