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