ServiceAuthorizationManager.CheckAccessCore(OperationContext) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Проверяет авторизацию для данного контекста операции на основе оценки политики по умолчанию.
protected:
virtual bool CheckAccessCore(System::ServiceModel::OperationContext ^ operationContext);
protected virtual bool CheckAccessCore (System.ServiceModel.OperationContext operationContext);
abstract member CheckAccessCore : System.ServiceModel.OperationContext -> bool
override this.CheckAccessCore : System.ServiceModel.OperationContext -> bool
Protected Overridable Function CheckAccessCore (operationContext As OperationContext) As Boolean
Параметры
- operationContext
- OperationContext
Объект OperationContext для текущего запроса авторизации.
Возвращаемое значение
Значение true
, если доступ предоставляется; в противном случае — значение false
. Значение по умолчанию — true
.
Примеры
В следующем примере показано переопределение метода CheckAccessCore.
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;
}
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
Другой пример см. в разделе Практическое руководство. Создание пользовательского диспетчера авторизации для службы.
Комментарии
Объект ServiceSecurityContext обычно является результатом оценки политики по умолчанию.
Для предоставления пользовательских решений об авторизации переопределите этот метод.
Этот метод можно использовать для принятия решений об авторизации на основе наборов утверждений, выводимых из входящих маркеров или добавляемых посредством внешних политик авторизации. Он также способен принимать решения об авторизации на основе свойств входящих сообщений, например заголовка действия.
В этом методе приложение может использовать параметр operationContext
для доступа к удостоверению вызывающего объекта (ServiceSecurityContext). Путем возвращения объекта RequestContext из свойства RequestContext приложение может получить доступ ко всему сообщению запроса (RequestMessage). Путем возвращения объекта MessageHeaders из свойства IncomingMessageHeaders приложение может получить доступ к URL-адресу службы (To) и операции (Action). Располагая этими сведениями, приложение может принять соответствующее решение об авторизации.
Утверждения, делаемые пользователем, находятся в свойстве ClaimSet, которое возвращается свойством ClaimSets объекта AuthorizationContext
. Текущий объект AuthorizationContext
возвращается свойством ServiceSecurityContext класса OperationContext.