Udostępnij za pośrednictwem


ServiceSecurityContext Klasa

Definicja

Reprezentuje kontekst zabezpieczeń strony zdalnej. Na kliencie reprezentuje tożsamość usługi, a w usłudze reprezentuje tożsamość klienta.

public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
Dziedziczenie
ServiceSecurityContext

Przykłady

W poniższym przykładzie użyto ServiceSecurityContext klasy , aby podać informacje o bieżącym kontekście zabezpieczeń. Kod tworzy wystąpienie StreamWriter klasy w celu zapisania informacji w pliku.

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

W poniższym przykładzie pokazano implementację CheckAccessCore metody , która używa ServiceSecurityContext klasy , aby przeanalizować zestaw oświadczeń.

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

Uwagi

Dane są częścią komunikatu SecurityMessageProperty .

Ta klasa służy do uzyskiwania informacji o zdalnym kontekście zabezpieczeń w czasie wykonywania. Kontekst zabezpieczeń jest tworzony, gdy klient jest pomyślnie uwierzytelniony i autoryzowany do uzyskiwania dostępu do metody. Po pomyślnym uwierzytelnieniu i autoryzowaniu komunikatu można uzyskać informacje o zabezpieczeniach od klienta i bieżącego wystąpienia usługi z wystąpienia tej klasy.

Możesz pobrać wystąpienie ServiceSecurityContext klasy z Current właściwości OperationContext lub użyć go z metody operacji usługi, jak pokazano w poniższym przykładzie.

Analizowanie zestawu oświadczeń

Typowym zastosowaniem klasy jest pobranie bieżącego zestawu oświadczeń w celu identyfikacji lub autoryzowania klienta podczas uzyskiwania dostępu do metody. Klasa ClaimSet zawiera kolekcję Claim obiektów, a każda z nich może być analizowana w celu określenia, czy istnieje określone oświadczenie. W przypadku podania określonego oświadczenia można udzielić autoryzacji. Ta funkcja jest udostępniana CheckAccessCore przez zastąpienie metody ServiceAuthorizationManager klasy . Pełny przykład można znaleźć w temacie Zasady autoryzacji.

Należy pamiętać, że w pewnych okolicznościach właściwość interfejsu IIdentity zwraca true nawet wtedy, IsAuthenticated gdy klient zdalny jest uwierzytelniany jako użytkownik anonimowy. (Właściwość PrimaryIdentity zwraca implementację interfejsu IIdentity ). Aby to miało miejsce, należy spełnić następujące warunki:

  • Usługa używa uwierzytelniania Windows.

  • Usługa umożliwia logowanie anonimowe.

  • Powiązanie to <customBinding>.

  • Powiązanie niestandardowe zawiera <security> element .

  • Element <security> zawiera <element secureConversationBootstrap> z atrybutem ustawionym requireSecurityContextCancellation na falsewartość .

Konstruktory

ServiceSecurityContext(AuthorizationContext)

Inicjuje ServiceSecurityContext nowe wystąpienie klasy z określonymi parametrami autoryzacji.

ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

Inicjuje ServiceSecurityContext nowe wystąpienie klasy z określonymi parametrami autoryzacji i kolekcją zasad.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

Inicjuje ServiceSecurityContext nowe wystąpienie klasy za pomocą kolekcji obiektów zasad.

Właściwości

Anonymous

Zwraca wystąpienie ServiceSecurityContext klasy zawierającej pustą kolekcję oświadczeń, tożsamości i innych danych kontekstowych, które są zwykle używane do reprezentowania strony anonimowej.

AuthorizationContext

Pobiera informacje o autoryzacji dla wystąpienia tej klasy. Zawiera AuthorizationContext kolekcję ClaimSet , którą aplikacja może przesłuchać i pobrać informacje strony.

AuthorizationPolicies

Pobiera kolekcję zasad skojarzonych z wystąpieniem tej klasy.

Current

Pobiera bieżący ServiceSecurityContextelement .

IsAnonymous

Pobiera wartość wskazującą, czy bieżący klient dostarczył poświadczenia do usługi.

PrimaryIdentity

Pobiera tożsamość podstawową skojarzona z bieżącym ustawieniem.

WindowsIdentity

Pobiera Windows tożsamość bieżącego ustawienia.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też