現在、MVC 4 Web API プロジェクト タイプを使用して Web API を開発しています。現在、API にセキュリティを追加する必要がある段階にあります。私は Authorize 属性を認識していますが、クライアントは別のアプローチを好むでしょう。このために、私は自分のクラスで Authorize 属性をオーバーライドしようとしました。基本的な開始点として、AuthorizeCore が常に false を返すようにしました。これは、認証されていないことを意味します。これをコントローラー内のアクションに追加すると、アクションは常に完了し、常にデータを取得します。カスタム属性が web.config ファイルに登録されていないことが原因である可能性があると思いますが、フォーム認証を使用しない場合にこれを行う方法がわかりません。
テストに使用しているコードは、以下に示すカスタム属性を持つ新しい MVC 4 Web API プロジェクトです。
public class Auth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("http://www.google.com");
}
}
次に、属性をデフォルトの ValuesController の Get メソッドに追加しました。
[Auth]
public IEnumerable<string> Get()
ただし、domain/api/Values に移動すると、予想される Google へのリダイレクトではなく、常にデータが表示されます。どんな助けでも大歓迎です。
編集: もう少し調べた後、ここでこれを見つけました: http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the -right-way.aspxこれは、System.Web.Http からではなく System.Web.MVC から 1 つを選択したため、間違った AuthorizeAttribute クラスを選択したことを示唆しています。AuthorizeCore をオーバーライドできないため、Http バージョンでは MVC バージョンと同じレベルの構成が許可されていないようです。これに関するこれ以上の助けをいただければ幸いです。