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のカスタム認証には何を使用すればよいですか?
私は反対に全く同意しません-
承認は承認フィルターで行われます。つまり、System.Web.Http.AuthorizeAttributeから派生し、IsAuthorizedメソッドを実装します。
パイプラインで許可フィルターよりも後で実行されるため、通常のアクションフィルターには許可を実装しません。
また、フィルターに認証を実装しません(JWTの解析など)-これは、MessageHandlerと呼ばれる拡張ポイントでさらに早く行われます。
使用するメソッドは、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;
}
}
}