【问题标题】:Authenticate a web application user on Azure Active Directory using OAuth使用 OAuth 在 Azure Active Directory 上对 Web 应用程序用户进行身份验证
【发布时间】:2015-04-23 04:07:55
【问题描述】:

上下文

我正在构建一个部署到用户需要登录的 Azure Webapps 的 Web 应用程序。为此,我将 Azure AD 与OAuth 2.0 Authorization Code Grant 结合使用。由于我使用的是 Nancy(使用 ASP.NET 主机)而不是 MVC,因此我无法遵循官方的 Azure AD MVC 示例,其中所有 OAuth 处理似乎都在后台神奇地发生。

重定向到 OAuth 端点很简单,并且用户也被正确地重定向回我的应用程序并使用授权码。

问题

现在我需要检索用户 ID,以便将其与我的应用程序中的用户数据库相匹配。我正在为此使用 ADAL,因为据我了解,这基本上是步骤D & E of the authorization code grant flow

现在让我感到困惑的是,Azure AD 不支持这个用例,说明

客户端“[ClientId]”和资源“[ResouceId]”标识同一个应用程序。

另外,正如this answer 所指出的,“ADAL 并不是为了在 Web 应用程序中实现 Web 登录。”

按照this blog 的建议,我已经能够通过在 Azure AD 中创建两个应用程序来解决这个问题,但感觉好像我误解了一些东西。很可能就是这种情况,因为我是 OAuth 和 Azure AD 的新手。

所以我的问题是,使用 Azure AD 从非 MVC Web 应用程序对用户进行身份验证的正确方法是什么?

【问题讨论】:

    标签: oauth-2.0 nancy azure-active-directory


    【解决方案1】:

    OWIN 中间件也应该适用于非 ASP.NET。例如,请参阅http://unlustrously55.rssing.com/browser.php?indx=24287735&item=13 - 在您的情况下,您将不得不使用 OpenId Connect 或 ww-federation 之一。

    【讨论】:

    • 我正在使用 Nancy 的 ASP.NET 托管,因为我将应用程序作为 Azure Webapp 运行。我在问题中澄清了这一点。您提供的链接显然只适用于自托管的南希。
    • 我不是 Nancy 专家 - 因此我无法判断这是否可以推广到 Nancy 的 ASP.NET 托管。然而,看起来 OWIN 中间件管道在这种情况下也应该是可托管的 - 相反会违背 OWIN 的存在理由。让我通知这个线程的人,让我们看看他们是否有建议
    • 您还应该能够在 IIS 上将 OWIN 中间件与 Nancy 一起使用。将 Microsoft.Owin.Host.SystemWeb 包添加到您的 WebApp。然后按照上面链接的说明进行操作。您不再需要 Main 方法,但之后的大部分内容应该是相同的(启动类、配置方法等)。如果您在 Web.Config 中直接配置了 Nancy,也可以跳过“.UseNancy()”行。
    • @Tratcher 我没有收到关于您的评论的通知,所以我现在才看到。我会看看这种方法,谢谢。
    最近更新 更多