これは私をしばらく困惑させました。一般的に遭遇する同様の状況のどれも、明らかにここには当てはまらないようです。私はおそらく明白な何かを逃したが、私はそれを見ることができない。AllowAnonymousがカスタムAuthorizationAttributeで動作しない
私のMVC Webアプリケーションでは、サイトの安全な領域をロックダウンするのではなく、公開されているアクションを明示的に開く必要があるように、Authorize属性とAllowAnonymous属性を使用します。私はそのアプローチを大いに好む。私はWebAPIで同じ動作をすることはできません。
私は次のようにSystem.Web.Http.AuthorizeAttributeから継承するカスタム認可属性書かれている:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class MyAuthorizationAttribute : System.Web.Http.AuthorizeAttribute
私はこのフィルタとして登録されています:
public static void RegisterHttpFilters(HttpFilterCollection filters)
{
filters.Add(new MyAuthorizationAttribute());
}
このすべての作品を期待どおり、資格情報なしでアクションは使用できなくなります。問題だ今、以下の方法でのAllowAnonymous属性がそれを行うことができないということである事:
[System.Web.Http.AllowAnonymous]
public class HomeController : ApiController
{
[GET("/"), System.Web.Http.HttpGet]
public Link[] Index()
{
return new Link[]
{
new SelfLink(Request.RequestUri.AbsoluteUri, "api-root"),
new Link(LinkRelConstants.AuthorizationEndpoint, "OAuth/Authorize/", "authenticate"),
new Link(LinkRelConstants.AuthorizationTokenEndpoint , "OAuth/Tokens/", "auth-token-endpoint")
};
}
}
最も一般的なシナリオは、以下の2つの承認/のAllowAnonymousが混在アップ属性を取得しているようです。 System.Web.MvcはWebアプリケーション用で、System.Web.HttpはWebAPI用です(とにかくわかっています)。
私が使用している両方の属性は、同じ名前空間 - System.Web.Httpです。私はこれが基本的な機能を継承し、必要なコードをOnAuthotizeメソッドに挿入できると仮定しました。
はのAllowAnonymous属性が、私はすぐに呼び出すOnAuthorizeメソッド内で動作するドキュメントによると:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
任意の思考は本当にいただければ幸いです。
この問題が発生した人は誰ですか? AuthorizeAttributeで
は必ず' System.Web.Mvc.AllowAnonymousAttribute'を使用して作成していませんSystem.Web.Http.AllowAnonymousAttribute'。それは私に起こり、私はそれを3時間後に実現しました... – ToXinE