2017-12-26 62 views
0

내 승인이 실패하는 이유를 알 수 없습니다.Custom AuthorizationHandler HandleRequirementAsync가 호출되지 않음

https://github.com/aspnet/Security/issues/1103

내 문제는 심지어 기반 인증 자원과 관련이 없습니다 불구하고 영업 이익은 비슷한 문제가 있었다처럼 보인다 :

나는이 동안 잠재적 인 이유를 조사했습니다.

AuthorizationHandler :

public class DebugOrDeveloperRequirementHandler : AuthorizationHandler<DebugOrDeveloperRequirement> 
{ 
    private readonly IHostingEnvironment _environment; 

    public DebugOrDeveloperRequirementHandler(IHostingEnvironment environment) 
    { 
     // breakpoint here - does get hit 
     _environment = environment; 
    } 

    /// <inheritdoc /> 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, DebugOrDeveloperRequirement requirement) 
    { 
     // breakpoint here but never hit 
     if (_environment.IsDevelopment() || _environment.IsIntegrationTest() || context.User.IsInRole(Constants.RoleNames.Developer)) 
      context.Succeed(requirement); 

     return Task.CompletedTask; 
    } 
} 

요구 사항 :

public class DebugOrDeveloperRequirement : IAuthorizationRequirement 
{ 

} 

Startup.cs 코드 :

 services.AddAuthorization(config => 
     { 
      config.AddPolicy(ApplicationPolicyNames.Contractor, builder => 
      { 
       builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
        .RequireAuthenticatedUser() 
        .RequireRole(DataLayer.Setup.Constants.RoleNames.Contractor, DataLayer.Setup.Constants.RoleNames.Developer, DataLayer.Setup.Constants.RoleNames.Admin); 
      }); 

      config.AddPolicy(ApplicationPolicyNames.Customer, builder => 
      { 
       builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
        .RequireAuthenticatedUser() 
        .RequireRole(DataLayer.Setup.Constants.RoleNames.Customer, DataLayer.Setup.Constants.RoleNames.Developer, DataLayer.Setup.Constants.RoleNames.Admin); 
      }); 

      config.AddPolicy(ApplicationPolicyNames.Administrator, builder => 
      { 
       builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
        .RequireAuthenticatedUser() 
        .RequireRole(DataLayer.Setup.Constants.RoleNames.Developer, DataLayer.Setup.Constants.RoleNames.Admin); 
      }); 

      config.AddPolicy(ApplicationPolicyNames.Developer, builder => 
      { 
       builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
        .RequireAuthenticatedUser() 
        .RequireRole(DataLayer.Setup.Constants.RoleNames.Developer); 
      }); 

      config.AddPolicy(ApplicationPolicyNames.DeveloperOrDebug, builder => 
      { 
       builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
        .Requirements.Add(new DebugOrDeveloperRequirement()); 
      }); 
     }); 
services.AddSingleton<IAuthorizationHandler, DebugOrDeveloperRequirementHandler>(); 

내 코드는 모든 다른 보이지 않는 여기

내 코드입니다 이리저리 m 설명서. 따라서 나는 왜이 AuthorizationHandler가 호출되지 않는지 실제로 알 수 없다.

답변

0

글쎄 지금 나는 어리 석다 - 액션 권한 부여 속성이 컨트롤러 속성을 오버라이드한다고 생각합니다.

내 컨트롤러에는 개발자 정책이있어서 해당 처리기가 실행을 시작하기 전에 작업을 실패하게 만들었습니다.