WebApiでの承認に関するいくつかのリソース(本とSOの回答)を読んでいます。
特定のユーザーのみにアクセスを許可するカスタム属性を追加したいとします。
ケース#1
私は、オーバーライドの このアプローチを見てきました OnAuthorization
。これは、何かが間違っている場合に応答を設定します
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
ケース#2
しかし、私もこの同様の例を見たことがあります。これもオーバーライドします OnAuthorization
が、を呼び出すことでbase
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
次に、HttpActionContext.Response
が設定されているかどうかを確認します
。設定されていない場合は、リクエストが承認され、ユーザーは問題ないことを意味します
ケース#3
しかし、私はオーバーライドするこのアプローチも見ましたIsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
ケース#4
そして、私は同様の例1を見ましたが、base.IsAuthorized(context)を呼び出しています:
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
もう一つ
OnAuthorizationはオーバーライドしないでください。[AllowAnonymous]の処理が欠落しているためです。
ご質問
1)どの方法を使用する必要がありますか:
IsAuthorized
またはOnAuthorization
?(またはいつ使用するか)2)
base.IsAuthorized or
base.OnAuthorization`はいつ呼び出す必要がありますか?3)これは彼らがそれをどのように構築したか?応答がnullの場合、すべて問題ありませんか?(ケース#2)
NB
注意してください、私はAuthorizeAttribute
すでに継承しているものだけを 使用しています(そして使用したい)AuthorizationFilterAttribute
どうして ?
私が最初の段階にいるので:http ://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
とにかくAuthorize属性を拡張して質問します。