SecurityTokenService.GetScope(ClaimsPrincipal, RequestSecurityToken) Methode

Definitie

Hiermee haalt u een Scope object op dat informatie bevat over de relying party (RP) die is gekoppeld aan de opgegeven aanvraag (RST). U moet deze methode overschrijven in uw implementatie van de SecurityTokenService klasse.

protected:
 abstract System::IdentityModel::Scope ^ GetScope(System::Security::Claims::ClaimsPrincipal ^ principal, System::IdentityModel::Protocols::WSTrust::RequestSecurityToken ^ request);
protected abstract System.IdentityModel.Scope GetScope(System.Security.Claims.ClaimsPrincipal principal, System.IdentityModel.Protocols.WSTrust.RequestSecurityToken request);
abstract member GetScope : System.Security.Claims.ClaimsPrincipal * System.IdentityModel.Protocols.WSTrust.RequestSecurityToken -> System.IdentityModel.Scope
Protected MustOverride Function GetScope (principal As ClaimsPrincipal, request As RequestSecurityToken) As Scope

Parameters

principal
ClaimsPrincipal

Een ClaimsPrincipal die de client vertegenwoordigt die de aanvraag indient.

request
RequestSecurityToken

Een RequestSecurityToken die de binnenkomende aanvraag (RST) vertegenwoordigt.

Retouren

Een Scope die de RP-informatie inkapselt die aan de aanvraag is gekoppeld.

Voorbeelden

Het codevoorbeeld dat in dit onderwerp wordt gebruikt, wordt uit het Custom Token voorbeeld genomen. Dit voorbeeld biedt aangepaste klassen die verwerking van Eenvoudige webtokens (SWT) mogelijk maken en bevat een implementatie van een passieve STS die een SWT-token kan leveren. Voor een voorbeeld van hoe u een actieve STS implementeert, ziet u het Federation Metadata voorbeeld. Zie de WIF-codevoorbeeldindex voor informatie over deze voorbeelden en andere voorbeelden die beschikbaar zijn voor WIF en waar u ze kunt downloaden.

In het volgende codevoorbeeld ziet u een implementatie van de GetScope methode. Deze implementatie controleert of de RP wordt herkend door de STS, valideert het ReplyTo adres in de aanvraag en stelt de Scope.ReplyToAddress eigenschap dienovereenkomstig in en stelt de aanmeldings- en versleutelingsreferenties in voor gebruik met de RP op basis van certificaten die in het bestand zijn vastgelegd.

// Certificate Constants
private const string SIGNING_CERTIFICATE_NAME = "CN=localhost";
private const string ENCRYPTING_CERTIFICATE_NAME = "CN=localhost";

private SigningCredentials _signingCreds;
private EncryptingCredentials _encryptingCreds;
// Used for validating applies to address, set to URI used in RP app of application, could also have been done via config
private string _addressExpected = "http://localhost:19851/";
/// <summary>
/// This method returns the configuration for the token issuance request. The configuration
/// is represented by the Scope class. In our case, we are only capable of issuing a token to a
/// single RP identity represented by the _encryptingCreds field.
/// </summary>
/// <param name="principal">The caller's principal</param>
/// <param name="request">The incoming RST</param>
/// <returns></returns>
protected override Scope GetScope(ClaimsPrincipal principal, RequestSecurityToken request)
{
    // Validate the AppliesTo address
    ValidateAppliesTo( request.AppliesTo );

    // Create the scope using the request AppliesTo address and the RP identity
    Scope scope = new Scope( request.AppliesTo.Uri.AbsoluteUri, _signingCreds );

    if (Uri.IsWellFormedUriString(request.ReplyTo, UriKind.Absolute))
    {
        if (request.AppliesTo.Uri.Host != new Uri(request.ReplyTo).Host)
            scope.ReplyToAddress = request.AppliesTo.Uri.AbsoluteUri;
        else
            scope.ReplyToAddress = request.ReplyTo;
    }
    else
    {
        Uri resultUri = null;
        if (Uri.TryCreate(request.AppliesTo.Uri, request.ReplyTo, out resultUri))
            scope.ReplyToAddress = resultUri.AbsoluteUri;
        else
            scope.ReplyToAddress = request.AppliesTo.Uri.ToString() ;
    }

    // Note: In this sample app only a single RP identity is shown, which is localhost, and the certificate of that RP is 
    // populated as _encryptingCreds
    // If you have multiple RPs for the STS you would select the certificate that is specific to 
    // the RP that requests the token and then use that for _encryptingCreds
    scope.EncryptingCredentials = _encryptingCreds;

    return scope;
}
/// <summary>
/// Validates the appliesTo and throws an exception if the appliesTo is null or appliesTo contains some unexpected address.
/// </summary>
/// <param name="appliesTo">The AppliesTo parameter in the request that came in (RST)</param>
/// <returns></returns>
void ValidateAppliesTo(EndpointReference appliesTo)
{
    if (appliesTo == null)
    {
        throw new InvalidRequestException("The appliesTo is null.");
    }

    if (!appliesTo.Uri.Equals(new Uri(_addressExpected)))
    {
        throw new InvalidRequestException(String.Format("The relying party address is not valid. Expected value is {0}, the actual value is {1}.", _addressExpected, appliesTo.Uri.AbsoluteUri));
    }
}

Opmerkingen

De GetScope methode wordt aangeroepen vanuit de tokenuitgiftepijplijn na de ValidateRequest methode en moet een Scope object retourneren dat is geconfigureerd voor de binnenkomende aanvraag. (De tokenuitgiftepijplijn wordt geïmplementeerd in de Issue methode.) Het Scope object bevat informatie over de RP die is gekoppeld aan de beveiligingstokenaanvraag (RST). Dit omvat informatie over de versleutelings- en ondertekeningsreferenties die moeten worden gebruikt met de RP en of er al dan niet uitgegeven tokens en/of symmetrische sleutels in het antwoord moeten worden versleuteld. Enkele typische taken die in de GetScope methode worden uitgevoerd, zijn:

  • Bepaal of de RP waarvoor het token is bedoeld een herkende RP is. Hoe dit wordt bereikt, is afhankelijk van uw implementatie. Als de beoogde RP geen geldige RP voor deze STS is, moet de methode een InvalidRequestException.

  • Bepaal de handtekeningreferenties die moeten worden gebruikt in het antwoord (RSTR) en stel de SigningCredentials eigenschap dienovereenkomstig in.

  • Bepaal of het antwoord en/of eventuele opgenomen symmetrische sleutels moeten worden versleuteld en welke referenties moeten worden gebruikt voor versleuteling. Stel de TokenEncryptionRequired, SymmetricKeyEncryptionRequireden EncryptingCredentials eigenschappen dienovereenkomstig in.

    Important

    De eigenschappen en SymmetricKeyEncryptionRequired eigenschappen zijn standaard TokenEncryptionRequired ingesteld true om te voorkomen dat de STS tokens uitgeeft die niet veilig zijn. Het wordt aanbevolen deze eigenschappen nooit in een productieomgeving in te false stellen.

  • Bepaal het adres waarnaar het antwoord moet worden geretourneerd. Stel de AppliesToAddress of ReplyToAddress eigenschap dienovereenkomstig in.

Notities voor uitvoerders

U moet deze methode overschrijven in uw implementatie van de SecurityTokenService klasse.

Van toepassing op

Zie ook