2016-08-18 2 views
3

내 주요 목표는 Windows 인증을 사용하여 사용자 정의 사용자 테이블을 쿼리하여 웹 응용 프로그램을 통해 사용하는 것입니다. 나는 이것을하는 전통적인 방법이 있는지 확신하지 못한다.데이터베이스의 사용자와 Windows 인증을 사용하는 방법

SQL 데이터베이스에 미리 정의 된 Users 테이블과 Roles 테이블이 있습니다. User.Identity.Name을 사용하여이 Users 테이블을 쿼리하고 역할과 함께 모든 테이블 데이터를 나중에 인트라넷 웹 응용 프로그램에서 나중에 사용할 수있는 ApplicationUser 클래스에 매핑합니까?

많은 기사를 읽은 후 내가 본 것과 밀접한 관련이있는 것을 찾지 못했습니다. 나는 Startup 클래스의 ConfigureServices 클래스에서이 작업을 수행 할 것이라고 가정하지만 그 또한 확실하지 않습니다. 사용자가 처음으로 사이트를 탐색 할 때마다 사용자를 찾아야합니다.

답변

2

나는 사용자 요청을 받기 위해 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() { } 
+0

합니다. 구현 한 후에 나는 올바르게 표시 할 것이며 다른 질문이 없는지 확인합니다. – HuntK24

관련 문제