我正在考虑为企业开发一个 Web 应用程序。我正在考虑以下场景:
应用程序应该能够为多个客户提供服务(称为 Multi-Tenancy ?)。这意味着多家公司可以为其员工使用该软件。
他们每个人都可能有自己的 azure 广告,也可能没有。因此,我想知道是否可以针对多个/不同的 azure 广告进行身份验证?
假设用户输入了他的电子邮件地址 [email protected]然后,当有人尝试使用[email protected]登录时,我会尝试根据companyA.com广告后面配置的广告对他进行身份验证。然后我会尝试针对为 companyB.com 配置的 azure 广告进行身份验证。
这可能吗?我怎样才能做到这一点?
最佳答案
这就是 Multi-Tenancy 应用程序存在的确切原因。因此,任何 Azure AD 中的用户都可以登录到您的应用程序。
它的工作方式是这样的:
- 您可以在 Azure AD 租户中定义应用程序,包括它可能需要的任何权限(例如从 Azure AD Graph 读取数据/通过 Microsoft Graph 访问用户的 OneDrive 的能力等)
- 定义应用时,将其设置为 Multi-Tenancy 。
- 现在,当其他组织的用户尝试登录您的应用时,他们会看到同意屏幕。此屏幕描述了您的应用程序及其目录所需的权限。
- 一旦他们同意应用所需的权限,就会在其目录中为应用创建一个服务主体。该主体有点像现在存在于其目录中的应用程序帐户。
- 然后它们将被转发回您的应用。
在您的应用方面有一些重要事项需要注意:
- 您必须将用户重定向到
https://login.microsoftonline.com/common/oauth2/authorize
(而不是特定于租户的端点)登录。 - 使用 ASP.NET MVC 中的 OpenIDConnect 中间件,您必须关闭颁发者验证,并手动执行一些操作(您必须检查租户之前是否已实际注册)
有关单租户与 Multi-Tenancy 的更多信息:http://www.andrewconnell.com/blog/azure-ad-what%E2%80%99s-the-difference-between-single-vs-multi-tenant
示例 Multi-Tenancy 应用程序 (ASP.NET MVC):https://github.com/Azure-Samples/active-directory-dotnet-webapp-multitenant-openidconnect
关于azure - 针对多个 Azure 广告对 Web 应用程序进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316181/