2009-08-29 10 views
27

承認タグは、ユーザーが承認されているかどうかをどのように判断しますか?Authorizeタグはどのように機能しますか? - ASP.NET MVC

たとえば、ユーザーがログインし、Authorizeタグを持つビューに移動しようとすると、次のようになります。ユーザーが許可されているかどうかは、どのように判断されますか?それはデータベースに照会してチェックしますか?

ロール認可のビューに移動するとどうなりますか?メンバーシップロールテーブルを照会しますか?

ASP.NETメンバーシップテーブルが重複したuserNamesを考慮しているので、私は不思議です。私は真剣なフィールドを使用して、どのユーザーが何であるかを判断し、ユーザーが同じ重複したuserNameを持つことを許可しますが、データベースでは一意になります。

これは、UserIdを使用する代わりに "userName"を使用して検索するため、多くの.NETメンバーシップのカスタムメソッドを記述する必要がありました。

ここで、これがAuthorizeタグの場合に該当するかどうか疑問に思っています。どのように動作するかわからないので、.NETのメンバーシップを使用していなかった場合と同様に、どのように決定するのかという手がかりはありません。

+0

私はあなたの質問に直接答えはありませんが、ASP.NET MVCはオープンソースであり、あなた自身で確認することができます。私はメンバーシッププロバイダに尋ねると仮定します。 – JoshJordan

答えて

24

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]タグを使用できます。

+0

メンバーシップチェックのビルドはどのように機能しますか? userNameまたはUerIdを使用していますか? – chobo2

+0

私は100%確信していませんが、主にhttpContext.User.Identity.IsAuthenticatedをチェックして値を返しますが、役割も確認できることがわかります。 – Kelsey

+0

hmm私はそれが動作していないように見えるか分からない私はまだページを見ることができます。それはちょうど私のURLに戻りURLを置くと、それについてのことです。 – chobo2

14

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

AuthorizationAttribute.OnAuthorization()メソッドは、基本的にUser.Identity.IsAuthenticatedが真であるかどうかをチェックします。これは、FormsAuthenticationの機能、または使用している他の認証方式の機能を利用するだけです。

関連する問題