使用基於聲明的授權
新的 ASP.NET 4.5 程式碼已將 ASP.NET RoleProvider “重新設置為” ClaimsProvider。
我想弄清楚的是,“基於聲明”的授權範例是什麼樣的(最好在 MVC4 中)?我的 Authorize 屬性如何與此功能互動或不互動?WebSecurity 和 Roles API 沒有改變;沒有“DoesUserHaveClaim()”簽名。同樣,也不清楚 Authorize 屬性如何與聲明互動。
這個“聲明授權”功能主要用於 OAuth 嗎?如果是這樣,如何將索賠轉發給我的申請?一塊餅乾?或者這個聲明提供者的功能是為了更廣泛的用途?
簡而言之,使用 ClaimsPrincipal 的故事是什麼?
我所見過的最接近某種有意義的事情就是這個討論。但我懷疑這已經過時了 - 它應該與 MVC4 網際網路項目模板生成的內容進行比較。即便如此,它仍然沒有建議如何在設置中使用 Authorize 屬性。
更新
我從以下來源找到了我的問題的答案:
- ClaimsPrincipal 的備註部分解釋說,WebSecurity、Roles 和 AuthorizeAttribute API 實際上歸結為必要時的聲明檢查。
- 這裡有一個基於聲明的 MVC4 範例(以及其他範例)。
- 此處顯示了基本的SAML 故事。
基於聲明的安全性有助於將您的安全模型與應用程序域分離。聲明可以是您想要附加到使用者身份的任何內容,例如電子郵件、電話號碼或指示使用者是否為超級使用者的標誌。這為您提供了設置授權過程的最大靈活性。從歷史上看,在 ASP.NET 應用程序中,您必須確定要允許的角色並在對應用程序進行程式時應用它們。然後檢查使用者是否具有授權他們的角色。這將您的安全模型與您的應用程序混合在一起。在基於索賠的情況下,您具有更大的靈活性,並且更典型的是設置一個授權方案,該方案將資源(例如:訂單管理系統中的訂單)和操作(例如:讀、寫、執行)作為輸入參數授權流程,有效地將安全性與您的應用程序分離。看ClaimsPrincipalPermissionAttribute以獲取此技術的範例。
OAuth 需要基於聲明的安全性,但它也適用於其他授權方案。您在應用程序中使用的自定義聲明可從ClaimsPrincipal.Current訪問。也有一些技術可以將此資訊儲存在 cookie 中,儘管 ASP.NET 安全管道預設情況下不這樣做。
您引用的討論適用於 Windows Identity Foundation (WIF),它現在是 4.5 中 .NET 的一部分,這就是為什麼基於聲明的身份是一等公民的原因。所有 Principal 類型都繼承自 ClaimsPrincipal。要全面了解基於聲明的安全性,請查看此免費電子書“基於聲明的身份和訪問控制指南(第 2 版) ”。該領域的真正專家是 Dominick Baier,他的部落格充滿了有關該主題的有用資訊。他還有一個很棒的 Pluralsight 線上培訓課程,名為“ ASP.NET 4.5 中的身份和訪問控制”。