2016-11-28 13 views
1

사용자에 대해 Windows 인증을 사용해야하지만 경로 위에 Authorize 특성에 대한 사용자 지정 역할 공급자를 구현해야하는 WebAPI 프로젝트가 있습니다. 그러나 구현할 때 항상 { "메시지": "이 요청에 대한 승인이 거부되었습니다."}라는 메시지가 내 통화 결과로 나타납니다. 또한 내 중단 점의 누구도 사용자 지정 역할 공급자웹 API에서 Windows 인증이있는 사용자 지정 RoleProvider

컨트롤러

[Authorize(Roles="Administrator")] 
[RoutePrefix("api/Constituents")] 
public class ConstituentsController : ApiController 
{ 
[Route("Constituents")] 
    [HttpGet] 
    public IDataResponse<List<IConstituent>> GetConstituents() 
    { 
     return service.GetConstituent(); 
    } 

사용자 정의 역할 공급자

public class CustomRoleProvider : RoleProvider 
{ 
    public CustomRoleProvider() 
    { 
     this.UserRepo = new UserRepository(); //Breakpoint here triggers 
     this.RoleRepo = new RoleRepository(); 
    } 
    public override string[] GetRolesForUser(string username) 
    { 
     var roles = UserRepo.GetUser(username)?.Roles?.Select(r => r.Name).ToArray(); 
     return roles; 
    } 
    public override bool IsUserInRole(string username, string roleName) 
    { 
     var user = UserRepo.GetUser(username); 
     return user.Roles.Select(r => r.Name).Contains(roleName); 
    } 

웹 구성

<authentication mode="Windows"/> 
    <roleManager cacheRolesInCookie="false" 
     defaultProvider="CustomRoleProvider" 
     enabled="true"> 
<providers> 
    <clear /> 
    <add name="CustomRoleProvider" 
     type="Data.CustomRoleProvider, Data" /> 
</providers> 

의 생성자에서 일을 제외하고 발동

나는 어떤 퍼즐 조각을 놓쳤는가? 현재 사용자가 요청을하고 데이터베이스에 적절한 역할이 있는지 확인해야합니다.

감사합니다.

답변

3

기본적으로 Visual Studio는 프로젝트의 Windows 인증 속성을 사용 안 함으로 설정합니다. 탭이 아닌 속성 창에서 속성을 사용으로 되돌려 야합니다. 그러면 RoleProvider의 중단 점에 도달 할 수 있습니다. 당신은 서버에 응용 프로그램을 넣을 때

Setting Windows Authentication Property in Visual Studio

, 당신은 Windows 인증 사용 안 함 익명 인증을 사용하려면 IIS에 유사한 과정을 수행해야 할 수 있습니다.