使用Azure Active Directory验证WebAPI

时间:2015-07-25 20:53:12

标签: 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]属性修饰的控制器时,我得到以下内容:

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

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

我知道它必须简单。我必须错过一些绝对愚蠢的东西,但不能,为了我的生活,弄清楚它可能是什么。

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

1 个答案:

答案 0 :(得分:10)

行为(“被重定向到AAD登录页面”)是您对Web应用程序(如ASP.NET MVC Web应用程序)的期望。但是,此行为不适用于ASP.NET Web API应用程序。 Web API(REST API)要求客户端在请求中 呈现 令牌。如果您不提供,则授权过滤器会拒绝该请求,这就是您在“导航”到Web API网址时看到HTTP 401响应的原因。

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

enter image description here

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

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