2017-02-01 18 views
0

WebApiコントローラにAuthorize属性を実装しようとしています。 Authorizeを実装する方法に関するリソースが見つかりました。さらに、Authorizationを実装するときに、スレッドとHttpContextプリンシパルを設定する必要があります。しかし、私は認可ロジックをどのように/どこで書くのかの例は見つけられません。C#属性ロジックの承認

public class MyController : ApiController 
{ 
    [Route("")] 
    [Authorize] 
    public async Task<IHttpActionResult> Get() {} 
} 
public class MyAuthorizationProvider 
{ 
    public void AuthorizeIGuess() 
    { 
     string authHeader = HttpContext.Request.Headers.GetValues("Authorization").FirstOrDefault(); 

     // do stuff with auth header 
     // create principal 

     HttpContext.Current.User = ...; 
     Thread.CurrentPrincipal = ...; 
    } 
} 

方法は、それがAuthorizeのために使用されているように、私のセットアップMyAuthorizationProviderやる、と私は私の認証コンテキストを設定する方法このでしょうか?あなたはAuthorizeAttribute

よう
public class MyAuthorizationProvider : AuthorizeAttribute 
{ 
    //Write your validation logic here. 
} 

を継承し、AuthorizeAttributeを継承する場合

public class MyController : ApiController 
    { 
    [Route("")] 
    [MyAuthorizationProvider] 
    public async Task<IHttpActionResult> Get() {} 
    } 

のように、このオーバーライドの許可属性を使用する必要が

答えて

1

、それがより良い方法であなたのロジックを実装するためにあなたにいくつかのオーバーライドメソッドを提供します、それも使用してください。詳細はcheck this answerです。

+0

単純に '[Authorize]'が使用されている例は、あくまでも抽象的な例ですか? '[Authorize]'属性を再利用することは可能ですか、それとも常に拡張/名前変更されていますか? –

+0

私はそれを試したことはありません。しかし、私はあなたがそれを再利用できると思います。 –