【发布时间】:2019-01-03 19:17:17
【问题描述】:
我正在尝试使用 Windows 身份验证和自定义声明来实施基于策略的身份验证方案。一切都编译并运行正常,但由于未知原因授权不断失败。这就是我正在做的事情:
1 - 在 startup.cs 中,我们添加 windows auth 作为身份验证方案,添加需要“BASIC_USER”声明的“BASIC_USER”策略,并注入声明转换器。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy("BASIC_USER", policy => policy.RequireClaim("BASIC_USER"));
});
}
2 - 我们的声明转换器在每个请求中将声明添加到 ClaimsPrincipal。 (通常这会添加基于数据驱动角色的声明,但为简洁起见进行了编辑。)
public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
Claim claim = new Claim(ClaimTypes.Role, "BASIC_USER");
((ClaimsIdentity)principal.Identity)
.AddClaim(claim);
return await Task.FromResult(principal);
}
}
3 - 我们用 Authorize 属性装饰我们的控制器:
public class MyController : Controller
{
[Authorize(Policy = "BASIC_USER")]
public async Task<ActionResult> Get()
{
...
}
}
当我在上面的第 1 步和第 2 步时,一切似乎都井井有条 - 在启动时添加策略并在请求中添加声明,但控制器仍然返回格式正确的 403。有没有办法调试授权过程还是我在这里遗漏了一些明显的东西?
【问题讨论】:
标签: authentication asp.net-web-api asp.net-core windows-authentication