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) |