web-dev-qa-db-ja.com

Authorizeタグはどのように機能しますか? -ASP.NET MVC

承認タグは、ユーザーが承認されているかどうかをどのように判断しますか?

たとえば、ユーザーがログインして、Authorizeタグのあるビューに移動しようとした場合などです。ユーザーが許可されているかどうかをどのように判断しますか?データベースへのクエリとチェックを行いますか?

彼らが役割の承認を得てビューに行く場合はどうですか?メンバーシップロールテーブルをクエリしますか?

ASP.NETメンバーシップテーブルが重複するuserNameと見なすものがあるので、私はただ疑問に思っています。深刻なフィールドを使用して、どのユーザーが何であるかを判別し、ユーザーが同じ重複userNameを持つことができるようにしますが、それでもデータベース内で一意です。

これにより、すべてがUserIdを使用する代わりに「userName」を使用して検索を行うため、多くの.NETメンバーシップ関連のカスタムメソッドを作成する必要がありました。

だから私は今、これがAuthorizeタグの場合である可能性があるかどうか疑問に思っています。私はそれがどのように機能するのか見当がつかないので、.NETメンバーシップを使用していなかった場合のように、それがどのようにそれを決定するのか見当がつかないでしょう。

31
chobo2

Authorizeタグは、ASP.NETのすべての組み込みメンバーシップチェックを使用します。独自のタグをロールするのは非常に簡単です。例えば:

public class MyAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null) throw new ArgumentNullException("httpContext");

        // Make sure the user is authenticated.
        if (httpContext.User.Identity.IsAuthenticated == false) return false;

        // Do you own custom stuff here
        bool allow = CheckIfAllowedToAccessStuff();

        return allow;
    }
}

次に、カスタムチェックを使用する[MyAuthorize]タグを使用できます。

26
Kelsey

ControllerActionInvoker 属性を解析し、資格情報を確認するときにOnAuthorization()を呼び出します。

AuthorizationAttribute.OnAuthorization()メソッドは、基本的にUser.Identity.IsAuthenticatedは本当かどうか。これは、FormsAuthenticationまたは使用している可能性のあるその他の認証スキームの機能を利用するだけです。

16
womp