web-dev-qa-db-ja.com

AuthorizeCoreメソッドはどのように機能しますか?

私の質問は、AuthorizeCoreメソッドはどのように機能するのですか?

たとえば、カスタムのAuthorize属性を作成したい場合、多くのプログラマーがこのコードを使用していることがわかりました。

var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
  {
    return false;
  }

そして彼らは彼ら自身のコードを書きます。

したがって、このコードが果たす役割は何であり、フォーム認証で使用するようにカスタマイズした場合、メソッドは管理者やコンピューター管理で作成された他のユーザーなどのWindowsユーザーのみをチェックします。

また、これを見つけました code しかし、開発者がユーザーをセッションのみではなくCookieとセッションに保存した理由がわかりません。

In PHP以前は、ユーザーをセッションにのみ保存し、ユーザーがセッションに存在するかどうかを確認していました。

16
user3284079

これはオープンソースであり、コードは次の場所にあります。

https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Mvc/AuthorizeAttribute.cs

そしてここに特定の方法:

    // This method must be thread-safe since it is called by the thread-safe OnCacheAuthorization() method.
    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;
    }

お役に立てば幸いです。

12
less