0

.NET Framework에서 단위 테스트 및 종속성 주입 기능을 사용하여 해결하려는이 사용자 지정 권한 체계가 있습니다. 설정을 설명해 드리겠습니다..NET 핵심 사용자 지정 권한 종속성 주입

인터페이스 IStsHttpClient 및 클래스 StsHttpClient를 만들었습니다. 이 클래스는 & 토큰을 디코딩하는 내부 웹 서비스에 연결합니다. 이것은 정확히 1 개의 메소드 "DecodeToken (string token)"을 가지며 생성자는 매우 간단합니다. 이것은 DI에서로드 된 옵션 객체를 취합니다.

내 AuthorizationHandler는 이론적으로 IStsHttpClient를 사용하여 토큰을 호출하고 디코딩합니다. 내 질문은 온라인 예제를 기반으로 권한 부여 처리기를 올바르게 지정하거나 빌드하는 방법을 알지 못합니다 (아래 코드 참조). 여기

인증 코드 :

public class MyAuthorizationRequirement : AuthorizationHandler<MyAuthorizationRequirement >, IAuthorizationRequirement 
{ 
    const string Bearer = "Bearer "; 
    readonly IStsHttpClient _client; 

    public BuzzStsAuthorizationRequirement([FromServices]IStsHttpClient client) 
    { 
     _client = client;   
    } 

    protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyStsAuthorizationRequirement requirement) 
    { 
     /* remaining code omitted - but this will call IStsHttpClient.Decode() */ 

내 Startup.cs

public void ConfigureServices(IServiceCollection services) 
    { 
     services.Configure<StsHttpOptions>(Configuration.GetSection("StsConfigurationInfo")); 
     services.AddScoped<IStsHttpClient , StsHttpClient >(); 
     services.AddAuthorization(options => 
     { 
      options.AddPolicy("Authorize", policy => 
      { 
       /* initialize this differently?? */ 
       policy.AddRequirements(new MyStsAuthorizationRequirement(/* somethign is needed here?? */)); 
      }); 
     }); 

답변

1

니콜라스,

는 현재 핸들러 및 요구 사항을 분리해야합니다. 그 외에도 핸들러에서 DI 항목을 유지하십시오. 요구 사항 자체는 마커 인터페이스 IAuthorizationRequirement가있는 DTO 또는 빈 클래스가 될 것입니다.

요구 사항 :

public class MyAuthorizationRequirement : IAuthorizationRequirement 
{ 

} 

처리기 :

public class MyAuthorizationHandler : AuthorizationHandler<MyAuthorizationRequirement> 
{ 
    const string Bearer = "Bearer "; 
    readonly IStsHttpClient _client; 

    public BuzzStsAuthorizationRequirement([FromServices]IStsHttpClient client) 
    { 
     _client = client;   
    } 

    protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyAuthorizationRequirement requirement) 
    { 
    ... 
    } 
} 

구성 : 내가 정확히 무엇을하는 미들웨어를 사용하여이 후 하루 이틀을 실현 결국

services.Configure<StsHttpOptions>(Configuration.GetSection("StsConfigurationInfo")); 
     services.AddScoped<IStsHttpClient , StsHttpClient >(); 
     services.AddAuthorization(options => 
     { 
      options.AddPolicy("Authorize", policy => 
      {    
       policy.AddRequirements(new MyAuthorizationRequirement()); 
      }); 
     }); 
+0

I 필요. –

관련 문제