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

获取授权正在被请求的主体。

Resource

获取授权其主题的资源。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于