0

.NETコアのユニットインジェクションと依存関係インジェクション機能を使用して解決しようとしているこのカスタム認可スキームがあります。.NETコアカスタム認可依存インジェクション

インターフェイスIStsHttpClientとクラスStsHttpClientを作成しました。このクラスは、&のトークンをデコードする内部Webサービスに接続します。これはちょうど1つのメソッド "DecodeToken(文字列トークン)"を持っており、コンストラクタは非常に単純です - 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欲しいです。 –

関連する問題