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



我需要向已经具有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)]

由于没有配置任何身份验证中间件来自动运行和创建您必须的身份,因此在授权时选择要使用的中间件。

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

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

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()
{
}
}

有关更多详细信息,您可以参考本文。

相关内容

最新更新