2017-10-11 14 views
0

メディエータパターンを使用してリクエストパイプラインを作成します。ステップの1つがAuthorizationである場合。 AdminAuthorizerクラスは次のように定義されています:.NETCore2コントローラにAuthorize属性を設定せずにユーザーを設定する方法

public AdminAuthorizer(IHttpContextAccessor httpContextAccessor) 
{ 
    _httpContextAccessor = httpContextAccessor; 
} 

public virtual async Task Authorize(TRequest message) 
{ 
    var user = _httpContextAccessor.HttpContext.User; 
    ... 
} 

問題は、私は、コントローラのアクションに[オーソライズ]を指定しない場合HttpContext.Userは「空」であるということです。 apply [Authorize] JWTトークンに情報が入力されます。

[Authorize] 
public async Task<IActionResult> SetActive(SetActiveCommand activeMessage) 
{ 
    await _mediator.Send(activeMessage); 
    return Ok(); 
} 

私は私の承認(TRequestメッセージ)メソッドを使用していたリクエストでHttpContext.Userを得ることができるように行う必要がありますか?

enter image description here

答えて

0

フィルタを持つすべての要求に対して許可を要求することができ、ここでASP.NET Core Authorization Lab:Step 2: Authorize all the thingsコード例を次に示します。

services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 

これは私がしたいがしたい場合は、[承認]属性を指定することなく、ユーザーがRequest.Headersからトークンを取得し、それを自分自身をデコードする必要があることを実現でもありません。

0

認証に頼らずに認証ビットを実行するようにASP.NETコアに指示することができます。これは、認証設定で、デフォルトの認証方式を指定することによって行われます。そう

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddAuthentication("<your-authentication-scheme>"); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseAuthentication(); 
    } 
} 

は、ASP.NETのコアを使用すると、リクエストごとに指定されたスキームに関連付けられた認証ハンドラを実行することを意味します。

+0

これには、services.AddAuthentication()およびapp.UseAuthentication()がありますが、services.AddAuthorization()を指定しない場合は、User/Claimsは取得されません。ありがとう。 – Riga

関連する問題