ServiceSecurityContext Klas

Definitie

Vertegenwoordigt de beveiligingscontext van een externe partij. Vertegenwoordigt op de client de service-id en vertegenwoordigt op de service de clientidentiteit.

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

Voorbeelden

In het volgende voorbeeld wordt de ServiceSecurityContext klasse gebruikt om informatie te verstrekken over de huidige beveiligingscontext. Met de code wordt een exemplaar van de StreamWriter klasse gemaakt om de informatie naar een bestand te schrijven.

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

In het volgende voorbeeld ziet u een implementatie van de methode die gebruikmaakt van de CheckAccessCore methode voor het ServiceSecurityContext parseren van een set claims.

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

Opmerkingen

De gegevens maken deel uit van het SecurityMessageProperty bericht.

Gebruik deze klasse om informatie te verkrijgen over een externe beveiligingscontext tijdens runtime. Er wordt een beveiligingscontext gemaakt wanneer een client is geverifieerd en gemachtigd voor toegang tot een methode. Wanneer een bericht is geverifieerd en geautoriseerd, kunnen de beveiligingsgegevens van de client en voor het huidige service-exemplaar worden verkregen uit een exemplaar van deze klasse.

U kunt een exemplaar van de ServiceSecurityContextCurrent eigenschap van de OperationContext klasse ophalen of deze gebruiken vanuit een servicebewerkingsmethode, zoals wordt weergegeven in het volgende voorbeeld.

Een claimset parseren

Een veelvoorkomend gebruik van de klasse is het ophalen van de huidige set claims voor het identificeren of autoriseren van een client bij het openen van een methode. De ClaimSet klasse bevat een verzameling Claim objecten en elke klasse kan worden geparseerd om te bepalen of een specifieke claim aanwezig is. Als de opgegeven claim is opgegeven, kan autorisatie worden verleend. Deze functionaliteit wordt geboden door de CheckAccessCore methode van de ServiceAuthorizationManager klasse te overschrijven. Zie het autorisatiebeleid voor een volledig voorbeeld.

Houd er rekening mee dat de IsAuthenticated eigenschap van de IIdentity interface onder bepaalde omstandigheden wordt geretourneerd true , zelfs als de externe client wordt geverifieerd als anonieme gebruiker. (De PrimaryIdentity eigenschap retourneert een implementatie van de IIdentity interface.) De volgende omstandigheden moeten waar zijn om dit te kunnen doen:

  • De service maakt gebruik van Windows authentication.

  • De service staat anonieme aanmeldingen toe.

  • De binding is een <customBinding>.

  • De aangepaste binding bevat een <security> element.

  • Het <security> element bevat een <secureConversationBootstrap> met het requireSecurityContextCancellation kenmerk ingesteld op false.

Constructors

Name Description
ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

Initialiseert een nieuw exemplaar van de ServiceSecurityContext klasse met de opgegeven autorisatieparameters en verzameling beleidsregels.

ServiceSecurityContext(AuthorizationContext)

Initialiseert een nieuw exemplaar van de ServiceSecurityContext klasse met de opgegeven autorisatieparameters.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

Initialiseert een nieuw exemplaar van de ServiceSecurityContext klasse met de verzameling beleidsregelsobject.

Eigenschappen

Name Description
Anonymous

Retourneert een exemplaar van de ServiceSecurityContext klasse die een lege verzameling claims, identiteiten en andere contextgegevens bevat die meestal worden gebruikt om een anonieme partij te vertegenwoordigen.

AuthorizationContext

Hiermee haalt u de autorisatiegegevens voor een exemplaar van deze klasse op. De AuthorizationContext bevat een verzameling die ClaimSet de toepassing kan ondervragen en de informatie van de partij kan ophalen.

AuthorizationPolicies

Hiermee haalt u de verzameling beleidsregels op die zijn gekoppeld aan een exemplaar van deze klasse.

Current

Haalt de huidige ServiceSecurityContextop.

IsAnonymous

Hiermee wordt een waarde opgehaald die aangeeft of de huidige client referenties aan de service heeft verstrekt.

PrimaryIdentity

Hiermee haalt u de primaire identiteit op die is gekoppeld aan de huidige instelling.

WindowsIdentity

Hiermee haalt u de Windows identiteit van de huidige instelling op.

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook