2017-06-14 4 views
1

Web APIを保護するためにHMACを使用します。 APIコントローラへのリクエストごとに、事前定義された基準に基づいてリクエストが有効かどうかを確認したい。チャレンジと応答を必要としない場合は、認証フィルタを使用できます。

私はカスタム認証フィルタを作成していますが、IAuthenticationFilterインターフェイスのメソッドの1つでは、認証チャレンジ/レスポンスが追加されています。私はこれをやりたいとは思わないので、どうすればその部分を無視することができますか?または、実装するための属性のよりよいタイプ(例えばaction属性)

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters

答えて

2

あなたはSystem.web.Http由来AuthorizeAttributeを実装することができますがあります。 これで、OnAuthorizationメソッドをオーバーライドしてカスタム認証を実行できます。下の例を見てください。

 public class ApiAuthorizationFilterAttribute : AuthorizeAttribute { 


    /// <summary> 
    /// Performs custom authorization based on incoming request 
    /// value(header) 
    /// </summary> 
    /// <param name="actionContext"></param> 
    public override void OnAuthorization(HttpActionContext actionContext) { 
     //Checking for any controller decorated with AllowAnonymousAttribute 
     bool skipAuthorization = actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 
     if (skipAuthorization) { 
      return; 
     } 

     if (!IsAuthorized(actionContext)) { 

      actionContext.Response = ApiHttpResponseMessage.HandleUnauthorizedRequest(actionContext.Request); 
      return; 
     } 
     if (!IsUserAuthorized(actionContext)) { 
      actionContext.Response = ApiHttpResponseMessage.CreateResponse(actionContext.Request, ErrorMessages.INVALID_CMF_EXCEPTION_MESSAGE, HttpStatusCode.Forbidden); 
     } 
    } 
+1

ありがとうございます。私もこの記事を参考にしていることがわかりました。http://www.infoworld.com/article/2988903/application-architecture/how-to-secure-web-api-using-authorization-filters.html – bitshift

関連する問題