使用Azure AD身份验证保护的WebAPI在IIS上不起作用,但在使用Visual Studio的IIS Express上可以正常工作

问题描述 投票:2回答:1

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

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

我的客户端/ Web应用程序已注册,并包含以下详细信息:

  1. 登录URL:http://localhost:93
  2. APP ID URL:http://xyz.onmicrosoft.com/XYZLocalClient
  3. ClientID:34A721C3-20E4-41D5-9BC1-486A99BF7C26
  4. 回复URL:http://localhost:93

我已将其他应用程序的权限(代理权限)授予客户端应用程序以访问WebAPI(LocalWebAPI)。

我的WebAPI具有以下设置:

  1. 它使用的OWIN中间件的startup.cs文件为:

    公共类启动{公共无效配置(IAppBuilder应用){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上注册:

登录URL: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" />

我还用[Authorize]属性装饰了我的控制器。

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

但是一旦我使用相同的参数将应用程序部署到IIS服务器上((期望该应用程序现在位于localhost:8087上,并且客户端应用程序的回复URL为:localhost:8087),我就会错误为401:调用WebAPI时未经授权的用户。

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

azure iis asp.net-web-api azure-active-directory iis-express
1个回答
0
投票

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

app.UseWindowsAzureActiveDirectoryBearerAuthentication(新的WindowsAzureActiveDirectoryBearerAuthenticationOptions{租户= ConfigurationManager.AppSettings [“ ida:Tenant”],TokenValidationParameters =新的TokenValidationParameters{ValidAudience = ConfigurationManager.AppSettings [“ ida:Audience”]},});

© www.soinside.com 2019 - 2024. All rights reserved.