나는 사용자 요청을 받기 위해 ClaimsTransformer
으로 갈 것입니다. 나는 단지 사용자 클레임을 얻고 Windows Authenticatin에 대한 인증을 처리하는 방법을 보여 주려고 노력할 것입니다.
첫째는 ClaimsTransformer
클래스 생성 : 당신이 ClaimsTransformer
와 역할을 추가하는 경우
public void Configure(IApplicationBuilder app)
{
//...
app.UseClaimsTransformation(async (context) =>
{
IClaimsTransformer transformer = context.Context.RequestServices.GetRequiredService<IClaimsTransformer>();
return await transformer.TransformAsync(context);
});
//...
}
불행하게도 User.IsInRole
방법 (ClaimsTransformer
작동하지 않습니다
Configure
방법에서 사용할 다음
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);
}
}
을에서 IsInRole이 될 것입니다 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