ServiceSecurityContext Класс

Определение

Представляет контекст безопасности удаленной стороны. На клиенте представляет удостоверение службы, а на службе представляет удостоверение клиента.

public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
Наследование
ServiceSecurityContext

Примеры

В следующем примере класс ServiceSecurityContext используется для предоставления сведений о текущем контексте безопасности. Код создает экземпляр класса StreamWriter для записи этой информации в файл.

// When this method runs, the caller must be an authenticated user
// and the ServiceSecurityContext is not a null instance.
public double Add(double n1, double n2)
{
    // Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    using (StreamWriter sw = new StreamWriter(@"c:\ServiceSecurityContextInfo.txt"))
    {
        // Write the primary identity and Windows identity. The primary identity is derived from
        // the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name);

        // Write the claimsets in the authorization context. By default, there is only one claimset
        // provided by the system.
        foreach (ClaimSet claimset in ServiceSecurityContext.Current.AuthorizationContext.ClaimSets)
        {
            foreach (Claim claim in claimset)
            {
                // Write out each claim type, claim value, and the right. There are two
                // possible values for the right: "identity" and "possessproperty".
                sw.WriteLine("Claim Type: {0}, Resource: {1} Right: {2}",
                    claim.ClaimType,
                    claim.Resource.ToString(),
                    claim.Right);
                sw.WriteLine();
            }
        }
    }
    return n1 + n2;
}
' When this method runs, the caller must be an authenticated user and the ServiceSecurityContext 
' is not a null instance. 
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
    ' Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    Dim sw As New StreamWriter("c:\ServiceSecurityContextInfo.txt")
    Try
        ' Write the primary identity and Windows identity. The primary identity is derived from 
        ' the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name)
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name)

        ' Write the claimsets in the authorization context. By default, there is only one claimset
        ' provided by the system. 
        Dim claimset As ClaimSet
        For Each claimset In ServiceSecurityContext.Current.AuthorizationContext.ClaimSets
            Dim claim As Claim
            For Each claim In claimset
                ' Write out each claim type, claim value, and the right. There are two
                ' possible values for the right: "identity" and "possessproperty". 
                sw.WriteLine("Claim Type: {0}, Resource: {1} Right: {2}", _
                claim.ClaimType, _
                claim.Resource.ToString(), _
                claim.Right)
                sw.WriteLine()
            Next claim
        Next claimset
    Finally
        sw.Dispose()
    End Try
    Return n1 + n2
End Function

В следующем примере показана реализация метода CheckAccessCore, в которой класс ServiceSecurityContext используется для синтаксического анализа набора утверждений.

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;
        Console.WriteLine("action: {0}", action);

        // Iterate through the various claimsets 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://example.org/claims/allowedoperation".
                foreach (Claim c in cs.FindClaims("http://example.org/claims/allowedoperation",
                    Rights.PossessProperty))
                {
                    // Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString());

                    // 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
        Console.WriteLine("action: {0}", 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://example.org/claims/allowedoperation".
                Dim c As Claim
                For Each c In  cs.FindClaims("http://example.org/claims/allowedoperation", _
                        Rights.PossessProperty)
                    ' Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString())
                    
                    ' 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 we get here, return false, denying access.
        Return False
    
    End Function 
End Class

Комментарии

Данные являются частью объекта SecurityMessageProperty для сообщения.

Используйте этот класс для получения сведений о удаленном контексте безопасности во время выполнения. Контекст безопасности создается после успешного прохождения клиентом проверки подлинности и его авторизации на доступ к методу. После успешного прохождения проверки подлинности и авторизации сообщения сведения о безопасности от клиента и для текущего экземпляра службы можно получить из экземпляра данного класса.

Можно извлечь экземпляр класса ServiceSecurityContext из свойства Current класса OperationContext или использовать его из метода операции службы, как показано в следующем примере.

Анализ объекта ClaimSet

Этот класс обычно используется для получения текущего набора утверждений с целью идентификации или авторизации клиента при доступе к методу. Класс ClaimSet содержит коллекцию объектов Claim, каждый из которых можно проанализировать на предмет наличия определенного утверждения. Если заданное утверждение предоставлено, клиент может быть авторизован. Эта функциональность обеспечивается переопределением метода CheckAccessCore класса ServiceAuthorizationManager. Полный пример см. в разделе "Политика авторизации".

В некоторых случаях свойство IsAuthenticated интерфейса IIdentity возвращает значение true, даже если удаленный клиент прошел проверку подлинности как анонимный пользователь. (Свойство PrimaryIdentity возвращает реализацию IIdentity интерфейса.) Чтобы это произошло, должны быть верны следующие обстоятельства:

  • служба использует проверку подлинности Windows;

  • служба допускает анонимный вход;

  • Привязка <— это customBinding>.

  • пользовательская привязка включает элемент <security>;

  • Элемент <security> содержит <secureConversationBootstrap> с заданным атрибутом requireSecurityContextCancellation false.

Конструкторы

ServiceSecurityContext(AuthorizationContext)

Инициализирует новый экземпляр класса ServiceSecurityContext указанными параметрами авторизации.

ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

Инициализирует новый экземпляр класса ServiceSecurityContext указанными параметрами авторизации и коллекцией политик.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

Инициализирует новый экземпляр класса ServiceSecurityContext коллекцией объектов политик.

Свойства

Anonymous

Возвращает экземпляр класса ServiceSecurityContext, содержащий пустую коллекцию утверждений, удостоверений и других данных контекста, которые обычно используются для представления анонимной стороны.

AuthorizationContext

Возвращает информацию об авторизации для экземпляра этого класса. Объект AuthorizationContext содержит коллекцию объектов ClaimSet, которые приложение может запрашивать и получать сведения о конкретной стороне.

AuthorizationPolicies

Возвращает коллекцию политик, связанную с экземпляром этого класса.

Current

Возвращает текущий ServiceSecurityContext.

IsAnonymous

Возвращает значение, указывающее, предоставил ли текущий клиент учетные данные службе.

PrimaryIdentity

Возвращает первичное удостоверение, связанное с текущим параметром.

WindowsIdentity

Возвращает удостоверение Windows текущего параметра.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел