簡體   English   中英

具有其他用戶詳細信息的MVC身份驗證

[英]MVC authentication with additional user details

我們目前開始使用MVC,現在正在研究身份驗證。 .net身份驗證不一定是我們的強項,因此需要一些建議或指針。

我們目前的設置:

  • 基本Windows身份驗證
    • 系統使用經過身份驗證的用戶來查詢第三方系統以獲取其當前角色
    • 這些角色然后存儲在會話變量中,並在需要授權時使用
    • 需要時,可以從各個表中調用任何其他用戶詳細信息

我們想要實現的目標:

  • 基本的Windows身份驗證(可能在其背面創建表單身份驗證cookie)
    • 系統用戶經過身份驗證的用戶可以查詢第三方系統以獲取其當前角色,
    • 這些角色存儲在cookie中,並且可以通過User.Roles等進行訪問
    • 任何其他用戶詳細信息(即用戶喜歡的顏色)都將在身份驗證時被調用並針對用戶個人資料進行存儲。 其他用戶詳細信息將作為鍵值對存儲在單個表中。

這是解決這個問題的正確方法嗎? 我們正在努力尋找任何樣本等以匹配我們所追求的方案。

不幸的是,我們需要使用第3方系統來訪問角色,這是通過Web服務調用實現的。

MVC 4是否有任何新改進可以更好地處理帶有更多用戶詳細信息的身份驗證? 任何幫助或建議,將不勝感激。 :)

聽起來像是聯合身份驗證的理想選擇。 您甚至可以使用WIF(Windows身份基礎),它現在是基類庫的一部分。

通常,聯合身份驗證包括以下部分:將身份驗證委派給外部身份提供者,使用身份提供者的響應,將身份持久保存在本地(可能在cookie中)。

WIF具有圍繞WS-Federation協議構建的解決方案,可解決所有這些問題。 這樣做的真正真正好處是,您可以輕松地在不同的身份提供者之間切換 您可能會認為這是無用的,直到您將其付諸實踐,然后立即開始在腦海中創建復雜的業務場景。

使用WIF需要一些知識,並且可以輕松回答特定問題。 但是,直到您至少掌握了一些基礎知識,這聽起來像是一個龐然大物。 您絕對應該從這里閱讀免費的電子書, 基於聲明的身份和訪問控制

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

只需下載並開始閱讀。 我保證你會立刻找到頁面您可以找到很多的你的問題和頁面,你會覺得這個常數“哇,所以這是它應該怎么做!”。

只是為您的問題之一提供特定的答案:用戶數據可以保留在身份驗證cookie中。 如果您堅持使用WIF的Claims模型,那么表達任意數據是很自然的: 聲明是一對(聲明類型,聲明值)。 但是,這需要切換到SessionAuthenticationModule,因為表單身份驗證模塊可能會產生太大的cookie:

http://www.wiktorzychla.com/2012/09/forms-authentication-revisited.html

(會話認證模塊具有特殊的“會話”模式,其中大部分身份存儲在會話容器中的服務器本地,因此cookie很小)

是的,聯邦身份模型可與MVC授權標簽一起使用。 類型角色的聲明被解釋為用戶角色。 然后,遠程身份提供者甚至可以設置用戶角色,並且您可以以通常的方式保護MVC控制器。

如果您很幸運,您的第三方組件可能會附帶一個Claims提供程序,因此您可以使用基於Claims的身份驗證,並讓Claims提供程序以您可以在您的應用程序中使用的Claims形式提供其他用戶數據。 有關教程,請參見此鏈接
如果您無法訪問Claims提供程序,則已知的安全構造塊仍適用於MVC。 因此,對於其他角色,您可以創建一個RoleProvider來請求角色並在應用程序中對其進行配置。 然后,您可以使用Authorize屬性保護控制器或操作。
為了優化對角色的請求,以使您不必一遍又一遍地從第三方系統進行請求,有一些替代方法:

  • 如您在問題中提出的那樣,您可以將它們存儲在cookie中 但是請注意,Cookie存儲在客戶端計算機上,並且可能被篡改。 因此,如果您具有可以使用的Forms身份驗證cookie,則可以將其存儲在此cookie的UserData中。 此Cookie已被加密,因此用戶無法輕松對其進行更改。 由於至少要在第一步中使用Windows身份驗證,因此您沒有可以使用的Forms身份驗證cookie。 在安全性方面,建議始終建立一個使用廣泛且經過良好測試的框架,因此,我不建議您創建自己的cookie並在其中存儲角色(盡管這樣做不會太艱巨)特定情況下的任務,以對Cookie數據進行加密/簽名)。
  • 您也可以將角色存儲在Session變量中。 缺點是會話會在一段時間后超時,因此您必須為這種情況做好准備。 另一方面,會話內存位於服務器上,因此用戶進行篡改並不是那么容易(如果可以的話,還會有很多其他問題)。
  • 您可以使用的另一個組件是服務器上的緩存 盡管您必須注意不要在多個用戶之間共享數據,因為它在用戶之間共享,但它也位於服務器上,並且可以在數據無效時提供更精細的控制。 因此,您可以配置一個時間范圍,之后任何用戶都可以使用新角色集進行授權,以防它被更改。

您的RoleProvider需要實現緩存技術(Cookie,Session或Cache)。
關於用戶配置文件的最后一點,我可以想象ASP.NET 2.0的用戶配置文件仍然有效。 我沒有任何經驗,因此無法為您提供是否使用它的建議。 另一方面,這些數據似乎對安全性不是太關鍵,因此一旦用戶通過身份驗證,您也可以將它們存儲在cookie或會話內存中。

暫無
暫無

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

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