使用Azure AD身份验证的WebAPI安全无法在IIS上运行,但使用Visual Studio在IIS Express上正常运行

时间:2017-08-29 12:31:58

标签: azure iis asp.net-web-api azure-active-directory iis-express

我正在使用Asp.Net WebAPI调用AnguarJS SPA应用程序。

我已在Azure AD上注册了客户端和后端应用程序。

我的客户端/网络应用程序注册了以下详细信息:

  1. 登录网址:http://localhost:93
  2. APP ID网址:http://xyz.onmicrosoft.com/XYZLocalClient
  3. ClientID:34A721C3-20E4-41D5-9BC1-486A99BF7C26
  4. 回复网址:http://localhost:93
  5. 我已授予客户端应用程序访问WebAPI(LocalWebAPI)的其他应用程序(委派权限)的权限。

    我的WebAPI具有以下设置:

    1. 它正在使用带有startup.cs文件的OWIN Middleware:

      public class Startup {     public void Configuration(IAppBuilder app)     {         ConfigureAuth(APP);     }

      private void ConfigureAuth(IAppBuilder app)
      {
          var azureADBearerAuthOptions = new 
              WindowsAzureActiveDirectoryBearerAuthenticationOptions
          {
              Tenant = ConfigurationManager.AppSettings["ida:Tenant"]
          };
      
          azureADBearerAuthOptions.TokenValidationParameters =
              new System.IdentityModel.Tokens.TokenValidationParameters()
              {
                  ValidAudience = 
                  ConfigurationManager.AppSettings["ida:Audience"]
              };
      

      app.UseWindowsAzureActiveDirectoryBearerAuthentication   (azureADBearerAuthOptions);  }

    2. 它在Azure AD上注册了以下参数:

    3. 登录网址:http://localhost:93/Api/V1/ APP ID URI:https://xyz.onmicrosoft.com/LocalCognia 回复网址:http://localhost:93/Api/V1/ *

      我的Web.Config文件是:

      <add key="owin:AutomaticAppStartup" value="true"/>
      <add key="ida:Tenant" value="xyz.onmicrosoft.com" />
      <add key="ida:Audience" value="34A721C3-20E4-41D5-9BC1-486A99BF7C26" />
      

      我还使用[授权]属性修饰了我的控制器。

      一切似乎都很好。当我从Visual Studio 2015环境(IIS Express)运行我的应用程序时,我能够对用户进行身份验证并能够从WebAPI访问资源。

      但是一旦我在IIS服务器上部署我的应用程序,使用相同的参数,(期望应用程序现在在localhost:8087上,并且客户端应用程序的回复URL为:localhost:8087),我是获取错误401:UnAuthroized用户调用WebAPI。

      我在WebAPI调用的Headers中获取令牌,但仍然收到错误。不确定这种行为。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

请在您的ConfigureAuth中使用以下代码:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
    TokenValidationParameters = new TokenValidationParameters
    {
        ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
    },
});