MVCで[Authorize]
という属性を使用する方法を読んだことがあります。これをアクションまたはセキュリティ保護するコントローラクラスに配置するだけです。MVC3でauthorize属性を使用する方法
私の質問は:Authorize
属性は、ユーザーがログに記録されているかどうかをどのように知っていますか?ユーザーが承認されているかどうかをAuthorize
に知らせるために、セッションオブジェクトを提供する必要がありますか?
MVCで[Authorize]
という属性を使用する方法を読んだことがあります。これをアクションまたはセキュリティ保護するコントローラクラスに配置するだけです。MVC3でauthorize属性を使用する方法
私の質問は:Authorize
属性は、ユーザーがログに記録されているかどうかをどのように知っていますか?ユーザーが承認されているかどうかをAuthorize
に知らせるために、セッションオブジェクトを提供する必要がありますか?
この属性の動作は、HttpContext.User.Identity.IsAuthenticated
です。
FormsAuthenticationのようなものを使用している場合は、ユーザーがマシン上に有効なFormsAuthentication Cookie(FormsAuthentication.SetAuthCookie
を使用して追加できる)を持っている場合はtrueに設定されます。
あなたがAuthorize
の内部動作に興味があるなら、これは発行され、Microsoftのソースコードからである。ここでは
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) {
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) {
return false;
}
return true;
}
Authorize属性クラスは、デフォルトでhttpcontextを引数として取ります。呼び出されると。次に、HttpContext.User.Identity.IsAuthenticatedブール値をチェックし、それに応じて動作します。これは、フォーム認証を使用する場合にのみ機能します。独自のログインロジック(セッションオブジェクトなど)を使用している場合、Authorize Attributeからクラスを派生させて呼び出すことができます。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
clsSession sess = httpContext.Session["Current"] as clsSession;
if (sess.IsLogin) return true;
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new ViewResult { ViewName = "Unauthorized" };
}
}
次に、あなたはこのように、このクラスを使用することができます:
[MyAuthorize]
public ActionResult Index()
{
return View();
}
これは動作します。すべてのコントローラーアクションで[認証]の代わりに[MyAuthorize]を使用できます。 falseを返すと、ビュー(この場合は「Unauthorized」)が返されます。ビュー名は何でもかまいません。ビュー/共有フォルダに配置できます。
ありがとうございます。素晴らしいリソース! – Jose3d