私はClaimsTransformer
と一緒にユーザークレームを取得します。私は、ユーザーのクレームを取得し、Windows Authenticatinの承認を処理する方法を示すことを試みます。
まずClaimsTransformer
クラスを作成します。
public class ClaimsTransformer : IClaimsTransformer
{
// i assume you have a user service in which you get user info via entity framework
private readonly IUserService _userService;
public ClaimsTransformer(IUserService userService)
{
_userService = userService;
}
public async Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
var identity = ((ClaimsIdentity)context.Principal.Identity);
// ... add user claims if required
var roles = _userService.GetRoles(identity.Name);
foreach(var role in roles)
{
identity.AddClaim(new Claim(ClaimTypes.Role, role));
}
return await Task.FromResult(context.Principal);
}
}
そして、残念ながらUser.IsInRole
方法は、あなたがClaimsTransformer
と役割を追加した場合(、IsInRoleはなりClaimsTransformer
では動作しませんConfigure
方法で
public void Configure(IApplicationBuilder app)
{
//...
app.UseClaimsTransformation(async (context) =>
{
IClaimsTransformer transformer = context.Context.RequestServices.GetRequiredService<IClaimsTransformer>();
return await transformer.TransformAsync(context);
});
//...
}
をそれを使用しますfalse)ので[Authorize(Roles = "")]
とClaimsTransformer
を使用することはできません。この場合、Claims Based Authorizationを使用して自動処理を処理できます。
だから、最終的にはConfigureServicesにコードの下に追加して、Authorize
属性を使用します。私は、これは私が後だった正確に何であると考えてい
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddSingleton<IClaimsTransformer, ClaimsTransformer>();
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministratorRole", policy => policy.RequireClaim(ClaimTypes.Role, "Administrator"));
});
//...
}
[Authorize(Policy = "RequireAdministratorRole")]
public IActionResult Index() { }
を。私は実装した後、私は正しいとマークし、私は他の質問がないことを確認します。 – HuntK24