使用 Azure Active Directory 对 Web API 进行身份验证

Authentication of a WebAPI with Azure Active Directory

所以这一定是我需要吸毒的情况:

我使用 Visual Studio(2013 年和 2015 年)创建了新的测试 WebAPI 应用程序,并将它们配置为使用组织帐户通过标准项目创建对话框进行身份验证。我已将它们连接到我工作场所 azure 订阅中的一个测试 Azure Active Directory (AAD) 目录以及我的 MSDN azure 订阅中的一个目录。

在所有情况下,首次加载应用程序时,我都会收到 IIS 401.2 响应。好的。我在项目 属性 window 上启用了匿名身份验证。然后,当我导航到装饰有 [Authorize] 属性的控制器时,我得到以下信息:

<Error>
    <Message>Authorization has been denied for this request.</Message>
</Error>

这在本地和云服务 Web 角色中都会发生(Web 角色 URL 添加到应用程序 URLs)。

我知道它必须简单。我一定是漏掉了一些绝对愚蠢的东西,但我终究无法弄清楚它可能是什么。

有没有人知道为什么我没有被重定向到 AAD 登录页面?

行为 ("being redirected to the AAD sign-in page") 是您对 Web 应用程序(例如 ASP.NET MVC Web 应用程序)的期望。但是,此行为不适用于 ASP.NET Web API 应用程序。 Web API (REST API) 期望客户端 在请求中呈现 令牌。如果您不提供,则授权过滤器会拒绝该请求,这就是当您 "navigate" 访问您的 Web API url 时看到 HTTP 401 响应的原因。

Web API 项目模板为您的应用程序配置 OWIN 中间件,以处理和验证客户端提供的 JWT 令牌。这方面的证据在您项目的 Startup.Auth.cs 文件中。

因此,您需要创建一个使用 Azure AD 进行身份验证的客户端应用程序以获取令牌。客户端必须在 Azure AD 中注册并获得访问您的 Web API 的权限。然后,您可以从客户端应用程序使用 Azure AD 颁发的令牌调用 Web API。要快速阅读此场景,请查看此 MSDN Magazine article。不要让文章的日期与您有关。它仍然适用于 Visual Studio 2013 年和 2015 年,并且很好地解释了这种情况如何以及为何如此运作。

此外,有关验证和调用 Web API 的其他方案,请参阅 GitHub 上的 Azure AD Samples