如何通过 Azure Active Directory 对多租户 ASP.NET 应用程序进行身份验证?

How do I authenticate via Azure Active Directory with multi-tenant ASP.NET applications?

我一直在我的数据中心使用 Azure Active Directory 试用许可证进行一些测试。我们公司拥有自己的托管服务和物理硬件,目前我们希望保持这种状态(尽管我们可能会研究在未来将其全部转移到云服务)。

目前,我们正尝试为使用 Azure AD 的客户提供单一登录选项。我们已经通过 CAS 支持这一点,但一些客户已经在内部使用 Azure AD,并希望将其用作 IIS 和 ASP.NET.

的集成 Windows 身份验证方法

如何以支持多租户的方式进行设置?我无法弄清楚如何在 IIS 级别执行此操作,并且我发现文献在明确答案方面有点缺乏。

据我所知,我必须为每个客户创建一个 VM(单独的 Windows 服务器实例),配置为通过 Azure AD 进行身份验证并传递 windows 身份验证凭据到 IIS。这有点烦人。

有没有一种方法可以让我继续在我自己的服务器上使用 运行 IIS 和 ASP.NET 网络应用程序,但使用 Azure AD Windows 通过 ASP.NET 进行身份验证,其中每个 IIS Web 应用程序实例都有自己单独的 Azure AD 配置?

我可以在 Web 应用程序根文件夹级别执行此操作吗? (也许通过设置该文件夹的权限来向该客户的 Azure AD 中的用户授予权限?)

我的目标,例如,鉴于此 Windows 服务器配置:

客户 A 的用户使用此 url:http://webhost/a

客户 B 的用户使用此 url:http://webhost/b

当用户 A 浏览到 Web 应用程序 A 时,集成的 windows 身份验证应该向用户询问 Azure AD "A" windows 用户名和密码,或者,如果已经通过身份验证,则显示来自 Web 应用程序 A 的用户内容。

当用户 B 浏览到 Web 应用程序 B 时,集成的 windows 身份验证应该向用户询问 Azure AD "B" windows 用户名和密码,或者,如果已经通过身份验证,则显示来自 Web 应用程序 B 的用户内容。

谢谢!

您绝对可以在自己服务器上的应用 运行 上利用 Azure AD。您不需要在 IIS 级别应用设置。当您使用 Azure AD 时,windows 集成身份验证将在客户端和 Azure AD 端点之间进行 - 这会导致令牌发送到不需要 windows 集成身份验证的通道上的应用程序。这就是允许您的应用程序托管在任何地方的原因,应用程序本身没有基础设施限制。 看看this sample for instructions on how to set up one app to trust an Azure AD tenant. You can apply the same process to all your apps, pointing them to different AAD tenants. Once you have done that: you can skip the interstitial auth page and get windows integrated auth by following the instructions here。我建议您先让示例运行,然后才专注于这最后一部分。同时解决这两件事可能很困难。