AuthorizationContext 類別

定義

提供授權事件的內容資訊。 這包括代表呼叫端的主體、被要求的資源,以及正在執行的動作。

public ref class AuthorizationContext
public class AuthorizationContext
type AuthorizationContext = class
Public Class AuthorizationContext
繼承
AuthorizationContext

範例

本主題中使用的 AuthorizationContext 程式碼範例取自 Claims Based Authorization 範例。 此範例提供自訂宣告授權管理員,可根據組態中指定的原則來授權主體。 此自訂管理員包含三個基本元件:衍生自 ClaimsAuthorizationManager 的類別,該類別會實作管理員、 ResourceAction 配對資源與動作的類別,以及讀取和編譯組態檔中指定的原則讀取器。 宣告授權管理員接著可以使用此編譯的原則來評估主體,以授權存取資源。 並非所有專案都是為了簡潔起見而顯示。 如需適用于 WIF 的這個範例和其他範例的相關資訊,以及下載這些範例的位置,請參閱 WIF 程式碼範例索引

下列程式碼顯示 CheckAccess 自訂宣告授權管理員的方法。 會根據 中所 AuthorizationContext 指定的資源和動作來評估主體的函式。 此函式會傳 true 回 或 false ,這會授與或拒絕對主體的存取。

static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
    /// <summary>
    /// Checks if the principal specified in the authorization context is authorized to perform action specified in the authorization context 
    /// on the specified resoure
    /// </summary>
    /// <param name="pec">Authorization context</param>
    /// <returns>true if authorized, false otherwise</returns>
    public override bool CheckAccess(AuthorizationContext pec)
    {
        //
        // Evaluate the policy against the claims of the 
        // principal to determine access
        //
        bool access = false;
        try
        {
            ResourceAction ra = new ResourceAction(pec.Resource.First<Claim>().Value, pec.Action.First<Claim>().Value);

            access = _policies[ra](pec.Principal);
        }
        catch (Exception)
        {
            access = false;
        }

        return access;
    }
}

下列 XML 顯示組態中指定的授權原則範例。 在第一個原則中,主體必須擁有其中一個指定的宣告,才能對指定的資源執行指定的動作。 在第二個原則中,主體必須擁有這兩個宣告,才能對指定的資源執行指定的動作。 在所有其他情況下,不論主體擁有的宣告為何,都會自動授與存取權。

<system.identityModel>
  <identityConfiguration>
    <claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
      <policy resource="http://localhost:28491/Developers.aspx" action="GET">
        <or>
          <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
          <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
        </or>
      </policy>
      <policy resource="http://localhost:28491/Administrators.aspx" action="GET">
        <and>
          <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
          <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
        </and>
      </policy>
      <policy resource="http://localhost:28491/Default.aspx" action="GET">
      </policy>
      <policy resource="http://localhost:28491/" action="GET">
      </policy>
      <policy resource="http://localhost:28491/Claims.aspx" action="GET">
      </policy>
    </claimsAuthorizationManager>

    ...

  </identityConfiguration>
</system.identityModel>

備註

類別 AuthorizationContext 代表宣告授權管理員、類別實 ClaimsAuthorizationManager 作所使用的內容,以判斷主體 (主體) 是否應該獲得授權,以在指定的資源上執行指定的動作。 宣告授權管理員會評估 方法中的 CheckAccess 授權內容,並根據主體所提供的宣告拒絕或授與存取權。

屬性 Principal 包含要求授權的主體、 Resource 屬性包含要授權主體的資源,而 Action 屬性包含主體想要在資源上執行的動作。 資源和動作都會以宣告的集合表示;不過,在大部分情況下,每個集合都包含單一宣告。

建構函式

AuthorizationContext(ClaimsPrincipal, Collection<Claim>, Collection<Claim>)

使用指定的主體、資源宣告和動作宣告,初始化 AuthorizationContext 類別的新執行個體。

AuthorizationContext(ClaimsPrincipal, String, String)

使用指定的主體、資源名稱和動作名稱,初始化 AuthorizationContext 類別的新執行個體。

屬性

Action

取得其主體要授權的動作。

Principal

取得要求其授權的主體 (Principal) (主體) (Subject)。

Resource

取得其主體要授權的資源。

方法

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於