Export (0) Print
Expand All

ServiceAuthorizationManager.CheckAccessCore Method

Checks authorization for the given operation context based on default policy evaluation.

Namespace:  System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

protected virtual bool CheckAccessCore(
	OperationContext operationContext
)

Parameters

operationContext
Type: System.ServiceModel.OperationContext

The OperationContext for the current authorization request.

Return Value

Type: System.Boolean
true if access is granted; otherwise, false. The default is true.

ServiceSecurityContext is generally the result from the default policy evaluation.

Override this method to provide custom authorization decisions.

This method can be used to make authorization decisions based on claim sets that are inferred based on incoming tokens, or added through external authorization policies. It can also make authorization decisions based on properties of the incoming message: for example, the action header.

In this method, the application can use the operationContext parameter to access the caller identity (ServiceSecurityContext). By returning the RequestContext object from the RequestContext property, the application can access the entire request message (RequestMessage). By returning the MessageHeaders object from the IncomingMessageHeaders property, the application can access the service URL (To) and the operation (Action). With this information, the application can perform the authorization decision accordingly.

The claims made by a user are found in the ClaimSet returned by the ClaimSets property of the AuthorizationContext. The current AuthorizationContext is returned by the ServiceSecurityContext property of the OperationContext class.

The following example shows an override of the CheckAccessCore method.

	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;                 
	}

For another example, see How to: Create a Custom Authorization Manager for a Service.

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft