属性[AllowAnonymous]と[AuthorizeAttribute]を使用してアクセスを制御するwebapiがあります。私は、認可にいくつかのロジックを追加するカスタム属性も作成しました。 Web APIが認証にベアラトークンを使用しています。 匿名リクエストを許可するためのすべてのアクションを作成する目的で、つまり、すべてのアクションに[AllowAnonymous]属性が設定されているように動作するように、プロジェクト内に設定(InDemoという名前のbool)があります。デモモードのときにすべてのAPIコントローラの要求を許可する
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider("self"),
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(30000),
AllowInsecureHttp = true
};
app.UseOAuthBearerTokens(OAuthOptions);
public class CustomApiAuthorizeAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (Settings.Default.InDemo)
return true;
// ... more custom validations
}
}
これは限り私の要求は、その後のisAuthorizedが呼び出されると、私は、カスタムの検証をバイパスすることができ、有効なベアラトークンが含まれていると正常に動作します。しかし、トークンが無効である場合、IsAuthorizedは呼び出されず、「この要求に対して承認が拒否されました」という応答が送信されます。 今度は、InDemoがtrueに設定されているときにトークンを無視したいとします。つまり、[AllowAnonymous]のような動作です。