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

标签 visual-studio azure model-view-controller asp.net-web-api azure-active-directory

所以这一定是我只需要一巴掌的情况:

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

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

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

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

我知道它必须是简单的事情。我一定错过了一些绝对愚蠢的东西,但我一生都无法弄清楚它可能是什么。

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

最佳答案

该行为(“重定向到 AAD 登录页面”)是您对 Web 应用程序(例如 ASP.NET MVC Web 应用程序)所期望的行为。但是,此行为不适用于 ASP.NET Web API 应用程序。相反,Web API (REST API) 希望客户端在请求中提供 token 。如果您不提供,授权过滤器将拒绝该请求,这就是您在“导航”到 Web API URL 时看到 HTTP 401 响应的原因。

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

enter image description here

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

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

关于visual-studio - 使用 Azure Active Directory 对 Web API 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631020/

相关文章:

visual-studio - 运行测试时 Debug.WriteLine() 发生两次

.net - 如何使用 VisualStudio docker 调试器(launchSettings.json 配置文件)从 Docker 容器公开自定义端口 (TCP)?

postgresql - 在 Azure 云中创建新的 Postgres 方案以供 Offer-Ready - "Non empty schema"

model-view-controller - 操作参数显示在查询字符串而不是 URL 中

asp.net-mvc - 拆分 MVC Controller 功能的最佳方法是什么?

c++ - 在 VM 中调试进程

visual-studio - 在 Visual Studio 中更改或添加默认编辑器

azure - Service Fabric 具有多个用于服务远程处理的通信监听器

java - Azure SDK 内存不足错误

java - 在 Spring MVC Web 应用程序中,您应该如何处理 Controller 级别以下发生的异常?