【问题标题】:How do I authenticate via Azure Active Directory with multi-tenant ASP.NET applications?如何通过 Azure Active Directory 对多租户 ASP.NET 应用程序进行身份验证?
【发布时间】:2015-03-04 17:13:49
【问题描述】:

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

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

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

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

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

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

例如,鉴于此 Windows Server 配置,我的目标:

  • 主机 (IIS 8) “webhost”
    • Web 应用“A”,c:\apps\a,授权用户包括 AAD“A”用户
    • Web 应用“B”,c:\apps\b,授权用户包括 AAD“B”用户

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

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

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

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

谢谢!

【问题讨论】:

    标签: asp.net iis azure azure-active-directory


    【解决方案1】:

    您绝对可以在自己的服务器上运行的应用程序上利用 Azure AD。您不需要在 IIS 级别应用设置。当您使用 Azure AD 时,Windows 集成身份验证将在客户端和 Azure AD 端点之间进行 - 这会导致在不需要 Windows 集成身份验证的通道上发送到应用程序的令牌。这就是让您的应用程序可以在任何地方托管的原因,应用程序本身没有基础设施限制。 查看this sample,了解有关如何设置一个应用程序以信任 Azure AD 租户的说明。您可以将相同的过程应用于您的所有应用程序,将它们指向不同的 AAD 租户。完成此操作后:您可以跳过插页式身份验证页面并按照说明here 获取 Windows 集成身份验证。我建议您首先让示例工作,然后才专注于最后一部分。同时解决这两件事可能很困难。

    【讨论】:

    • 感谢您的快速回答!不过,我想避免更改代码或 web.config 文件。这可能吗?我只想编辑每个 Web 应用根文件夹的属性 > 安全性以授权 <Azure AD name>/WebAppUsersGroup,并继续使用 Web 应用已经支持的 Windows 身份验证。基本上,理想的解决方案是使用 Azure AD 而不是“传统”AD,并且会继续工作,这样我就可以从 ASP.NET 页面检查域和用户名的 Request.ServerVariables["LOGON_USER"]。
    • 如果我理解正确,我认为这不是一个选择。 Azure AD 使用的身份验证协议位于高于网络堆栈的层,因此您需要在应用程序前面有一些可以理解协议、生成登录请求、解析令牌等的东西。您不需要保留设置在 web.config 中,但您确实需要向应用代码传递值才能与正确的 AD 租户互动。
    • Bummer.. 希望“Active Directory”这个名字意味着它可以取代传统的 AD 而不会影响使用它的服务。谢谢你的信息。
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2019-09-14
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多