ASP.NET Web APIを使用して認証をコーディングし始めると、デスクトップ、モバイル、Webをサポートするためにクロスプラットフォームになりますか?ヘッダーでトークンを使用するなど、RESTful認証を行ういくつかの方法を読みました。
この方法を利用するサンプルプロジェクトはありますか?
質問:
[Authorize]
属性を修正するにはどうすればよいですか?トークンは確実な方法だと思います。フォーム認証は、WebのCookieに基づいています。ただし、すべての非ブラウザクライアントにとって、最も理想的な状況ではありません。
私が提案するのは、カスタムAuthorizationFilterAttributeを作成し、OnAuthorizationメソッドをオーバーライドすることです。その方法では、クライアントが有効な資格情報を提供した後、クライアントに発行したトークンの存在を確認できます。この属性は、検証する任意のメソッドまたはコントローラーで使用できます。ここにあなたが参照するかもしれないサンプルがあります
public class AuthorizeTokenAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext != null)
{
if (!AuthorizeRequest(actionContext.ControllerContext.Request))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request };
}
return;
}
}
private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
{
bool authorized = false;
if (request.Headers.Contains(Constants.TOKEN_HEADER))
{
var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
if (tokenValue.Count() == 1) {
var value = tokenValue.FirstOrDefault();
//Token validation logic here
//set authorized variable accordingly
}
}
return authorized;
} }
TOKEN_HEADERは、認証された要求のためにクライアントが返すHTTPヘッダーを表す単なる文字列です。
それでは、それを見てみましょう
また、John Petersenによるこの投稿を確認してください。 ASP.NET Web APIを安全にする
RESTサービスのユーザーを認証する方法はたくさんあります。トークンを使用することは可能ですが、 Basic Authentication を使用するのはさらに簡単で、標準およびクロスプラットフォームとほぼ同じです。行くことができる。
authorization と authentication を混同しないでください。 [Authorize]属性はすべて承認に関するものですが、ユーザーが他のメカニズムを使用して認証された後に限ります。最初に適切な認証を行わないと、承認はまったく役に立ちません。
チェックするのに最適なリソースは、 Dominick Baier このテーマの専門家です。
私は非常に単純なアプローチを使用します。
新しいASP.NET MVC Web APIを使用したこのアプローチのサービスは、ブラウザ/ javascriptおよびネイティブ(デスクトップまたはモバイル)など、あらゆるタイプのクライアントに対応できます。
UはActionFilterAttributeを使用して、OnActionExecutingメソッドをオーバーライドできます。後でこのフィルターをglobal.csに登録して、Application Startメソッドでこのようなすべてのアクションにこのフィルターを適用します
var config = GlobalConfiguration.Configuration; config.Filters.Add(new CustomAuthAttribute());
{名前空間Customss {パブリッククラスCustomAuthAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
// To inforce HTTPS if desired , else comment out the code
if (!String.Equals(actionContext.Request.RequestUri.Scheme, "https", StringComparison.OrdinalIgnoreCase))
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)
{
Content = new StringContent("HTTPS Required")
};
return;
}
// get toekn from the header
var userToken = actionContext.Request.Headers.GetValues("UserToken");
// Customer Logic to check the validity of the token.
// U can have some DB logic to check , custom STS behind or some loca cache used to compare the values
}
}
}}