ログインまたはトークンのカスタマイズを受け入れるAuthorizeAttributeを開発する方法を教えてください。
次の手順でログインまたはトークンのカスタマイズされたAuthorizeAttributeが開発できます。
- System.Web.Mvc.AuthorizeAttributeクラスを継承した、新しいAuthorizeAttributeクラスを作成します。
- OnAuthorization メソッドをオーバーライドします.このメソッド内で、ログイン情報 (ユーザー名やパスワードなど) やトークンがリクエストに含まれているかどうかを確認し、ユーザーを認証します.
- リクエストにログイン情報やトークンが含まれる場合は、対応する検証メカニズム(データベースのクエリやアクセストークン検証サービスなど)を使用し、ログイン情報やトークンの有効性を検証できます。
- 認証が成功した場合、リクエストは続行を許可され、Nullが返されます。認証に失敗した場合、HttpUnauthorizedResultオブジェクトが返され、リクエストは拒否され、権限のないHTTPステータスコード(401)が返されます。
- あなたが作成したAuthorizeAttributeを、操作検証が必要な操作に対する認証を行うために、あなたのASP.NET MVCアプリケーションのコントローラーまたはアクションメソッドで使用します。
これは、ログイン情報またはトークンを受け付けるAuthorizeAttributeの作成方法を示すサンプルコードです。
using System;
using System.Web.Mvc;
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["Authorization"] != null)
{
// 获取请求头中的令牌
string token = filterContext.HttpContext.Request.Headers["Authorization"];
// 验证令牌的有效性
bool isValidToken = ValidateToken(token);
if (!isValidToken)
{
// 验证失败,返回未授权状态码
filterContext.Result = new HttpUnauthorizedResult();
}
}
else
{
// 请求头中没有令牌,返回未授权状态码
filterContext.Result = new HttpUnauthorizedResult();
}
}
private bool ValidateToken(string token)
{
// 在这里可以实现对令牌的验证逻辑
// 返回令牌是否有效的布尔值
// 例如,你可以将令牌与存储在数据库中的令牌进行比较
// 或者将令牌发送到令牌验证服务进行验证
// 返回true表示令牌有效,返回false表示令牌无效
return true;
}
}
カスタムAuthorizeAttributeをコントローラーやアクションメソッドで使用します。
[CustomAuthorize]
public ActionResult MyAction()
{
// 执行需要验证的操作
return View();
}
これにより、リクエストがMyActionアクションメソッドに到達したとき、CustomAuthorizeAttributeはリクエストのログイン資格情報またはトークンを検証し、検証結果に基づいてリクエストの続行を許可するかどうかを判断します。