1

我發現Asp.Net中的很多東西都是基於假定的知識。例如,我對互聯網認證知之甚少,並且很難在初學者的層面上找到任何有關它的信息。在Asp.Net MVC 3中,AuthorizeAttribute的身份驗證用戶是什麼?

令我困惑的一件事是AuthorizeAttribute。我知道如何使用它以及它應該做什麼,但是我想知道它是否會在您有自定義登錄系統的情況下工作。

在AuthorizeAttribute頁面上的描述,說簡單 When you mark an action method with AuthorizeAttribute, access to that action method is restricted to users who are both authenticated and authorized.

那麼,什麼是身份驗證的用戶,你如何設置一個用戶進行身份驗證。如果我創建了我自己的登錄系統,我該如何設置以便登錄的用戶對AuthorizeAttribute進行足夠的身份驗證以允許他進入?

回答

5

它檢查的IIdentity的IsAuthorized。

在Global.asax中添加一個方法來處理「AuthorizeRequest」。然後在方法做,你需要檢查用戶被授權(檢查會話,餅乾,數據庫等)

然後HttpContext.Current.User設置爲GenericPrincipal有一個實現IIdentity的並具有用戶什麼都它的IsAuthorized設置爲true。

事情是這樣的:

public class MvcApplication : HttpApplication 
    { 
    public MvcApplication() 
    { 
     this.AuthorizeRequest += this.AuthorizedRequestEvent; 
    } 

    private void AuthorizedRequestEvent(object sender, System.EventArgs e) 
    { 
     // do checking here with what ever you want 
     bool isAuthenicated = false; 

     // change this what what ever implements IIdentity 
     var user = new User(); 
     user.IsAuthenticated = isAuthenicated ; 
     GenericPrincipal principal; 
     principal = new GenericPrincipal(user, new string[] { }); 
     HttpContext.Current.User = principal; 
    } 
    } 
+2

+1 - 沒有告訴OP的好答案「去買書或缺乏基本知識「 – 2012-03-12 14:03:36

+0

謝謝,有時候一個簡單的例子說明的不僅僅是一段文字。 – TWith2Sugars 2012-03-12 14:04:23

+0

如果我得到一個SAML證書以及用戶身份驗證是我想要存儲somwhere的東西,比如在cookie或HttpContext中? – 2012-03-12 14:31:50

1

HttpContext.Current.User包含User對象,它是當前登錄的用戶。雖然在Controller內,但這也可以從User獲得。

+0

其IsAuthorized:) – 2012-03-12 14:04:01

+0

謝謝,我忘了提授權 - 只是去了驗證。 – 2012-03-12 14:07:18

1

如果你需要初學者水平的知識,那麼你需要去買一本好書。快速的Amazon.com搜索顯示了對Pro ASP.NET MVC 3框架的大量支持,所以這可能是一個很好的開始。像這樣一本書的價值在於它會引導您通過構建Web應用程序(包括身份驗證)的前後例子。

至於安全..你不想建立自己的..特別是如果你是初學者。這很容易導致錯誤並最終導致混亂(在那裏......做到了這一點)。你想要做的是使用內置身份驗證。再次,一本書將是一個很好的開始,但另外從內置模板開始,並遵循這個walkthrough。完成之後,開始閱讀代碼並將類名稱用作Google搜索點。

+0

把東西運到美國以外的地方可能會有很多問題,但一本書會有幫助。內置身份驗證在本項目中無助於我,我將使用其中的一部分,但人員未在本地進行身份驗證,除非默認系統支持SAML證書,否則對我來說沒有多大作用。 – 2012-03-12 14:40:27

1

您缺乏關於ASP.NET管道如何工作的基本知識。

http://msdn.microsoft.com/en-us/library/bb470252.aspx

特別地,早期的某處是AuthenticateRequest事件,其中插入模塊可能可能設定的用戶進行認證。他們是怎麼做到的?通過將當前HttpContextUser設置爲不同於null的其他值,其中Identity.IsAuthenticated評估爲true

由於上下文的User屬性不束縛於任何特定類型的(而它可以是其類型已從IPrincipal繼承的任何值)任何認證提供商是可能的。

而最後一件事 - 很多人堅持使用表單驗證模塊從cookie中檢索信息。

+0

是的,我真的需要學習基本的東西。我總是不知道幕後發生了什麼。我猜我應該花時間。在Web.config中,身份驗證設置爲「窗體」,那麼是否會爲我自動執行某些操作? – 2012-03-12 14:35:46

+0

是的。表單意味着'用戶'將通過表單身份驗證模塊從cookie解析。由於它在MVC和WebForms中幾乎以相同的方式工作,所以您可以閱讀任何Forms Authentication教程('MembershipProvider'和'RoleProvider'等等) – 2012-03-12 16:02:20