2012-02-03 52 views
3

我很難理解如何定義索賠。網絡上有很多關於創建索賠的信息,但沒有一個似乎同意。我發現在不同的職位要求的四個屬性:WIF:自定義索賠

  • ClaimType
  • ClaimValue
  • 值類型

考慮要建立一個要求一個場景的表示用戶有權編輯用戶對象,設置這些屬性的正確方法是什麼?

另外,在WIF中,似乎沒有「Right」屬性的屬性。僅在WCF的上下文中使用「Right」嗎?

我困惑,幫忙!

編輯:

感謝您的回覆。爲了使這個多一點具體的,我目前看到我的定製要求兩個選項:

1 ClaimType =編輯,ClaimValue =用戶

2 ClaimType =行動,ClaimValue = EditUser

選項似乎更多的是「基於索賠」,並且似乎更多地是「基於角色」。思考?

回答

1

我不確定你在哪裏閱讀的聲明應該有一個正確的屬性,我認爲這是濫用的概念。

一套索賠本身並不表達用戶權利。相反:

索賠集+ 政策 =用戶權利。

通常,基於聲明的應用程序會將策略應用於一組傳入用戶聲明以作出授權決定。基於角色的訪問是最常見的,因此這些決策可能與User.IsInRole(「Manager」)一樣簡單,只需檢查用戶是否擁有ClaimType =「http://schemas.microsoft.com/ ws/2008/06/identity/claims/role「和ClaimValue =」Manager「。

在線酒類商店可能要求用戶超過21歲,在這種情況下,您會檢查年齡聲明。不過,對於加拿大版本的網站,如果年齡限制可能爲18歲,則會有不同的政策。如果這些「權利」是通過索賠本身傳遞的,那麼這種政策靈活性就不可能實現。

4

.Net中有兩種不同的Claim類型。一個在WIF(Microsoft.IdentityModel.Claims)中,一個在System.IdentityModel.Claims中用於WCF pre-WIF(它不是WCT的實際組成部分)。正如你所提到的,只有System.IdentityModel.Claims.Claim有一個Right屬性。

我在WCF和ASP.Net中使用了WIF和ASP.Net的聲明方法,WIF和WIF編程模型都是最簡單的。

對於您描述的用戶編輯場景,我將使用合適的名稱定義一個角色。用戶編輯器可以,但它聽起來很具體。你應該看看你想授予這些用戶的所有權限的集合,並提出一個合適的總結名稱(可能是UserAdministrator?)。

對於這些用戶,您應該添加一個角色聲明(即類型爲http://schemas.microsoft.com/ws/2008/06/identity/claims/role或)。如果您的身份提供者在您的應用程序外部,並且您無法控制其發佈的聲明,那麼您將需要實施自定義ClaimsAuthenticationManager,以通過添加新角色聲明來轉換髮布的聲明集。

然後你可以裝飾你要授予了PrincipalPermissionAttribute這樣的訪問操作:

[的PrincipalPermission(SecurityAction.Demand,角色=「UserAdministrator」)

這個框架是相當靈活並且可以在ASP.Net,WCF或者只是常規的.Net開發中以多種不同的方式使用。你的問題並沒有給出很多上下文來給出具體例子的答案。