ServiceAuthorizationManager 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供服務作業的授權存取檢查。
public ref class ServiceAuthorizationManager
public class ServiceAuthorizationManager
type ServiceAuthorizationManager = class
Public Class ServiceAuthorizationManager
- 繼承
-
ServiceAuthorizationManager
範例
下列範例會示範名為 MyServiceAuthorizationManager
的類別,此類別繼承自 ServiceAuthorizationManager,而且會覆寫 CheckAccessCore 方法。
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
// Extract the action URI from the OperationContext. Match this against the claims
// in the AuthorizationContext.
string action = operationContext.RequestContext.RequestMessage.Headers.Action;
// Iterate through the various claim sets in the AuthorizationContext.
foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
// Examine only those claim sets issued by System.
if (cs.Issuer == ClaimSet.System)
{
// Iterate through claims of type "http://www.contoso.com/claims/allowedoperation".
foreach (Claim c in cs.FindClaims("http://www.contoso.com/claims/allowedoperation", Rights.PossessProperty))
{
// If the Claim resource matches the action URI then return true to allow access.
if (action == c.Resource.ToString())
return true;
}
}
}
// If this point is reached, return false to deny access.
return false;
}
}
Public Class MyServiceAuthorizationManager
Inherits ServiceAuthorizationManager
Protected Overrides Function CheckAccessCore(ByVal operationContext As OperationContext) As Boolean
' Extract the action URI from the OperationContext. Match this against the claims.
' in the AuthorizationContext.
Dim action As String = operationContext.RequestContext.RequestMessage.Headers.Action
' Iterate through the various claimsets in the AuthorizationContext.
Dim cs As ClaimSet
For Each cs In operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
' Examine only those claim sets issued by System.
If cs.Issuer Is ClaimSet.System Then
' Iterate through claims of type "http://www.contoso.com/claims/allowedoperation".
Dim c As Claim
For Each c In cs.FindClaims("http://www.contoso.com/claims/allowedoperation", _
Rights.PossessProperty)
' If the Claim resource matches the action URI then return true to allow access.
If action = c.Resource.ToString() Then
Return True
End If
Next c
End If
Next cs
' If this point is reached, return false to deny access.
Return False
End Function
End Class
備註
這個類別會負責評估所有原則 (定義允許使用者執行之作業的規則)、比較原則與用戶端所做的宣告、將結果 AuthorizationContext 設定為 ServiceSecurityContext,以及提供是否允許或拒絕呼叫者存取已指定服務作業的授權決策。
每次 CheckAccessCore 嘗試存取資源時,Windows Communication Foundation (WCF) 基礎結構都會呼叫 方法。 此方法會分別傳回 true
或 false
以允許或拒絕存取。
ServiceAuthorizationManager是 WCF身分識別模型基礎結構的一部分。 「身分識別模型」可讓您建立自訂授權原則和自訂授權配置。 如需識別模型運作方式的詳細資訊,請參閱 使用身分識別模型管理宣告和授權。
自訂授權
這個類別不會執行任何授權,而且會允許使用者存取所有服務作業。 若要提供更嚴格的授權,您必須建立會檢查自訂原則的自訂授權管理員。 若要這樣做,請繼承自這個類別並覆寫 CheckAccessCore 方法。 請透過 ServiceAuthorizationManager 屬性指定該衍生類別的執行個體。
在 CheckAccessCore 中,應用程式可以使用 OperationContext 物件來存取呼叫者身分識別 (ServiceSecurityContext)。
藉由取得會傳回 IncomingMessageHeaders 物件的 MessageHeaders 屬性,應用程式便可以存取服務 (To) 和作業 (Action)。
藉由取得會傳回 RequestContext 物件的 RequestContext 屬性,應用程式便可以存取整個要求訊息 (RequestMessage) 並據此執行授權決策。
如需範例,請參閱 如何:建立服務的自訂授權管理員。
若要建立自訂授權原則,請實作 IAuthorizationPolicy 類別。 如需範例,請參閱 如何:建立自訂授權原則。
若要建立自訂宣告,請使用 Claim 類別。 如需範例,請參閱 如何:建立自訂宣告。 若要比較自訂宣告,您必須比較宣告,如 如何:比較宣告所示。
如需詳細資訊,請參閱 自訂授權。
您可以在用戶端應用程式組態檔中使用< serviceAuthorization >來設定自訂授權管理員的類型。
建構函式
ServiceAuthorizationManager() |
初始化 ServiceAuthorizationManager 類別的新執行個體。 |
方法
CheckAccess(OperationContext) |
檢查指定作業內容的授權。 |
CheckAccess(OperationContext, Message) |
檢查在需要存取訊息時的作業內容授權。 |
CheckAccessCore(OperationContext) |
檢查根據預設原則評估所指定作業內容的授權。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetAuthorizationPolicies(OperationContext) |
取得參與原則評估的一組原則。 |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |