27

ASP.NET MVCについての私の理解は、承認には次のようなものを使用する必要があるということです-

public class IPAuthorize : AuthorizeAttribute {

protected override bool AuthorizeCore(HttpContextBase httpContext) {
    //figure out if the ip is authorized 
    //and return true or false
}

しかし、Web APIには、はありませんAuthorizeCore(..)

ありOnAuthorization(..)、MVCの一般的なアドバイスは使用しないことOnAuthorization(..)です。

Web APIのカスタム認証には何を使用する必要がありますか?

4

2 に答える 2

44

承認は承認フィルターで行われます。つまり、System.Web.Http.AuthorizeAttributeから派生し、IsAuthorizedメソッドを実装します。

通常のアクションフィルターでは、承認フィルターよりもパイプラインの後半で実行されるため、承認を実装しません。

また、フィルターに認証を実装しません(JWTの解析など)。これは、MessageHandlerと呼ばれる拡張ポイントでさらに早い段階で実行されます。

于 2013-03-01T08:33:12.500 に答える
11

に使用するメソッドは、System.Web.Http.AuthorizeAttributeから継承するカスタムApiAuthorize属性です。例えば:

public class ApiAuthorizeAttribute : AuthorizeAttribute
{
    readonly CreditPointModelContext _ctx = new CreditPointModelContext();

    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if(Authorize(actionContext))
        {
            return;
        }
        HandleUnauthorizedRequest(actionContext);
    }

    protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var challengeMessage = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
        challengeMessage.Headers.Add("WWW-Authenticate", "Basic");
        throw new HttpResponseException(challengeMessage);

    }

    private bool Authorize(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        try
        {
            //boolean logic to determine if you are authorized.  
            //We check for a valid token in the request header or cookie.


        }
        catch (Exception)
        {
            return false;
        }
    }
}
于 2013-03-01T14:42:15.960 に答える