簡體   English   中英

ASP.Net MVC成員資格

[英]ASP.Net MVC Memberships

我想使用AuthorizeAttribute來控制允許哪些用戶訪問我的操作。 我只想澄清一下我的邏輯是有條理的。

  1. 我創建自己的IPrincipal實現
  2. 我將用戶的憑據發布到安全控制器的登錄操作中。
  3. 我使用UserService類驗證憑據,並將從UserService類返回的IPrincipal分配給HttpContext.User
  4. 我的WebAuthorizeAttribute繼承AuthorizeAttribute,它檢查當前的HttpContext.User.Identity.IsAuthenticated和HttpContext.User.IsInRole,以確定用戶是否有權訪問該操作。

事情正常嗎? 我知道我可以繼承MembershipProvider,但是我不需要那里的所有功能,實際上只需要具有兩個不同角色的登錄能力。

您必須將IPrincipal存儲在某個位置,並在每次請求時將其還原。 如果您將使用FormsAuthentication,這是一個很好的解決方案:

ASP.NET 2.0 Forms身份驗證-保持自定義但簡單

您可以在此處找到其他解決方案:

使用表單身份驗證在ASP.NET MVC上的哪里存儲已記錄的用戶信息?

以及其他許多StackOverflow問題:)

編輯

關於MyBusinessLayerSecurityClass.CreatePrincipal(id,id.Name):

您應該閱讀以下頁面:

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

特別是:

FormsAuthenticationModule類構造一個GenericPrincipal對象,並將其存儲在HTTP上下文中。 GenericPrincipal對象持有對FormsIdentity實例的引用,該實例代表當前已通過身份驗證的用戶。 您應該允許表單身份驗證為您管理這些任務。 如果您的應用程序有特定要求,例如將User屬性設置為實現IPrincipal接口的自定義類,則您的應用程序應處理PostAuthenticate事件。 FormsAuthenticationModule驗證表單身份驗證cookie並創建GenericPrincipalFormsIdentity對象之后,將發生PostAuthenticate事件。 在此代碼中,您可以構造一個包裝FormsIdentity對象的自定義IPrincipal對象,然后將其存儲在HttpContext中。 用戶屬性。

設置身份驗證Cookie后,將自動管理FormsIdentity。 您要做的就是將其包裝在IPrincipal中。 當HttpContext.Current.User屬性不為null (這是GenericPrincipal,您將在不久后替換)時,所有這些事情都會發生。 當HttpContext.Current.User為null時,則沒有較早創建的身份驗證Cookie,並且未對用戶進行身份驗證。

我相信以下是更典型的:

  1. 我創建自己的IPrincipal實現
  2. 我將用戶的憑據發布到安全控制器的登錄操作中。
  3. 我使用UserService類驗證憑據,並構造一個cookie,其中包含此用戶的一些標識信息 通常,使用FormsAuthentication.SetAuthCookie或該類的實用程序方法的某種組合。
  4. 在Application AuthenticateRequest事件中,檢查cookie並分配Context.User。 注意:該值在AuthenticateRequest事件之后自動分配給Thread.CurrentPrincipal。 這是一次性的分配,並且此后這些值不會自動同步。
  5. 我的WebAuthorizeAttribute繼承AuthorizeAttribute,它檢查當前的HttpContext.User.Identity.IsAuthenticated和HttpContext.User.IsInRole,以確定用戶是否有權訪問該操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM