如何为Web API应用程序(.net Framework 4.7)设置混合身份验证?

时间:2020-07-27 13:43:33

标签: .net api authentication web azure-active-directory

我需要向已经具有Windows身份验证的现有Web API应用程序中添加其他身份验证方法。我添加了一个带有以下代码的启动文件:

using System.Configuration;
using Microsoft.IdentityModel.Tokens;
using Microsoft.Owin;
using Microsoft.Owin.Security.ActiveDirectory;
using Owin;

[assembly: OwinStartup(typeof(TodoList_Web.Startup))]
namespace TodoList_Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                {
                    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                    TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                    },
                });
        }
    }
}

Windows身份验证处于IIS级别,看来我应该在IIS中启用它并在应用程序级别添加-将配置添加到web.config文件:

<system.webServer>
  <security>
    <authentication>     
       <windowsAuthentication enabled="true" />
    </authentication>
  </security>

它将完全起作用吗?我可以以某种方式使用Authorize属性来指定应将哪种身份验证应用于特定的方法/控制器吗?像这样:

[Authorize(AuthenticationType=Windows)] 
or 
[Authorize(AuthenticationType=WindowsAzureActiveDirectoryBearer)]

1 个答案:

答案 0 :(得分:0)

由于没有将身份验证中间件配置为自动运行并创建身份,因此必须在授权时选择将使用的中间件。

对于.net框架,您可以使用authorization policy选择要授权的中间件。

授权策略由一个或多个要求组成,并在应用程序启动时作为Configuration文件中Startup.cs中的授权服务配置的一部分注册。

public void Configuration(IAppBuilder app)
    {
        app.UseAuthorization(options =>
        {
            options.AddPolicy("AbleToCreateUser", policy => policy.RequireClaim(JwtClaimTypes.Role, "Manager"));
        });
    }

例如,使用Authorize属性通过指定策略名称来应用策略;

public class UserManagementController : ApiController 
{
    [ResourceAuthorize(Policy = "AbleToCreateUser")]
    public IHttpActionResult CreateUser()
    {
    }
}

有关更多详细信息,您可以参考此article

相关问题