Bagikan melalui


SecurityTokenService.GetScope(ClaimsPrincipal, RequestSecurityToken) Metode

Definisi

Scope Mendapatkan objek yang berisi informasi tentang pihak yang mengandalkan (RP) yang terkait dengan permintaan yang ditentukan (RST). Anda harus mengambil alih metode ini dalam implementasi SecurityTokenService kelas Anda.

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

Parameter

principal
ClaimsPrincipal

ClaimsPrincipal yang mewakili klien yang membuat permintaan.

request
RequestSecurityToken

RequestSecurityToken yang mewakili permintaan masuk (RST).

Mengembalikan

Scope yang merangkum informasi RP yang terkait dengan permintaan.

Contoh

Contoh kode yang digunakan dalam topik ini diambil dari Custom Token sampel. Sampel ini menyediakan kelas kustom yang memungkinkan pemrosesan Simple Web Tokens (SWT) dan mencakup implementasi STS pasif yang mampu melayani token SWT. Untuk contoh cara menerapkan STS aktif, Anda dapat melihat sampelnya Federation Metadata . Untuk informasi tentang sampel ini dan sampel lain yang tersedia untuk WIF dan tentang tempat mengunduhnya, lihat Indeks Sampel Kode WIF.

Contoh kode berikut menunjukkan implementasi GetScope metode . Implementasi ini memverifikasi bahwa RP diakui oleh STS, memvalidasi ReplyTo alamat dalam permintaan dan mengatur Scope.ReplyToAddress properti yang sesuai, dan mengatur kredensial penandatanganan dan enkripsi untuk digunakan dengan RP berdasarkan sertifikat yang dikodekan secara permanen dalam file.

// 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));
    }
}

Keterangan

Metode GetScope ini dipanggil dari alur penerbitan token setelah ValidateRequest metode dan harus mengembalikan objek yang Scope dikonfigurasi untuk permintaan masuk. (Alur penerbitan token diimplementasikan dalam Issue metode .) Objek Scope merangkum informasi tentang RP yang terkait dengan permintaan token keamanan (RST). Ini termasuk informasi tentang kredensial enkripsi dan penandatanganan yang akan digunakan dengan RP dan apakah akan mengenkripsi token dan/atau kunci konten yang dikeluarkan atau tidak dalam respons. Beberapa tugas umum yang dilakukan dalam metode ini GetScope adalah:

Catatan Bagi Implementer

Anda harus mengambil alih metode ini dalam implementasi SecurityTokenService kelas Anda.

Berlaku untuk

Lihat juga