AuthorizationContext 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供授权事件的上下文信息。 这包括表示该调用方的主体,请求的资源和执行的操作。
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) |