SecurityTokenService Klasa

Definicja

Abstrakcyjna klasa bazowa, która definiuje właściwości i metody usługi tokenu zabezpieczającego (STS).The abstract base class that defines the properties and methods of a security token service (STS).

public ref class SecurityTokenService abstract
public abstract class SecurityTokenService
type SecurityTokenService = class
Public MustInherit Class SecurityTokenService
Dziedziczenie
SecurityTokenService

Przykłady

Przykłady kodu, które są używane w SecurityTokenService tematach, są pobierane z Custom Token przykładu.The code examples that are used in the SecurityTokenService topics are taken from the Custom Token sample. Ten przykład zawiera klasy niestandardowe, które umożliwiają przetwarzanie prostych tokenów sieci Web (SWT) i obejmują implementację pasywnej usługi STS, która jest w stanie obsłużyć token SWT.This sample provides custom classes that enable processing of Simple Web Tokens (SWT) and it includes an implementation of a passive STS that is capable of serving an SWT token. Przykład sposobu implementacji aktywnej usługi STS można zobaczyć na przykład Federation Metadata .For an example of how to implement an active STS, you can see the Federation Metadata sample. Aby uzyskać informacje o tych przykładach i innych przykładach dostępnych dla WIF i informacje o tym, gdzie je pobrać, zobacz przykładowy indeks kodu WIF.For information about these samples and other samples available for WIF and about where to download them, see WIF Code Sample Index. Poniższy kod przedstawia implementację pasywnej usługi STS przy użyciu SecurityTokenService klasy.The following code shows the implementation of a passive STS using the SecurityTokenService class.

using System;
using System.Collections.Generic;
using System.IdentityModel;
using System.IdentityModel.Configuration;
using System.IdentityModel.Protocols.WSTrust;
using System.IdentityModel.Tokens;
using System.Linq;
using System.Security.Claims;
using System.Security.Cryptography.X509Certificates;
using System.Security.Principal;

namespace PassiveSTS
{
    /// <summary>
    /// Overrides the SecurityTokenService class to provide
    /// the relying party related information, such as encryption credentials to encrypt the issued
    /// token, signing credentials to sign the issued token, claims that the STS wants to issue for a 
    /// certain token request, as well as the claim types that this STS is capable
    /// of issuing.
    /// </summary>
    public class CustomSecurityTokenService : SecurityTokenService
    {
        // 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/";
        public CustomSecurityTokenService(SecurityTokenServiceConfiguration configuration)
            : base(configuration)
        {
            // Setup the certificate our STS is going to use to sign the issued tokens
            _signingCreds = new X509SigningCredentials(CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, SIGNING_CERTIFICATE_NAME));

            // Note: In this sample app only a si   ngle 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
            _encryptingCreds = new X509EncryptingCredentials(CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, ENCRYPTING_CERTIFICATE_NAME));
        }

        /// <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>
        /// This method returns the content of the issued token. The content is represented as a set of
        /// IClaimIdentity intances, each instance corresponds to a single issued token. Currently, the Windows Identity Foundation only
        /// supports a single token issuance, so the returned collection must always contain only a single instance.
        /// </summary>
        /// <param name="scope">The scope that was previously returned by GetScope method</param>
        /// <param name="principal">The caller's principal</param>
        /// <param name="request">The incoming RST, we don't use this in our implementation</param>
        /// <returns></returns>
        protected override ClaimsIdentity GetOutputClaimsIdentity( ClaimsPrincipal principal, RequestSecurityToken request, Scope scope )
        {
            //
            // Return a default claim set which contains a custom decision claim
            // Here you can actually examine the user by looking at the IClaimsPrincipal and 
            // return the right decision based on that. 
            //
            ClaimsIdentity outgoingIdentity = new ClaimsIdentity();
            outgoingIdentity.AddClaims(principal.Claims);

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

    }
}

Poniższy kod pokazuje, jak wywołać niestandardową pasywną usługę STS, aby przetworzyć żądanie WS-Federation przez wywołanie FederatedPassiveSecurityTokenServiceOperations.ProcessRequest(HttpRequest, ClaimsPrincipal, SecurityTokenService, HttpResponse) metody z kodu znajdującego się w default.aspx.cs pliku.The following code shows how to invoke a custom passive STS to process a WS-Federation request by calling the FederatedPassiveSecurityTokenServiceOperations.ProcessRequest(HttpRequest, ClaimsPrincipal, SecurityTokenService, HttpResponse) method from the code behind in the default.aspx.cs file.

using System;
using System.IdentityModel.Services;
using System.Security.Claims;

namespace PassiveSTS
{
    public partial class _Default : System.Web.UI.Page
    {
        /// <summary>
        /// We perform the WS-Federation Passive Protocol processing in this method. 
        /// </summary>
        protected void Page_PreRender( object sender, EventArgs e ) 
        {
            FederatedPassiveSecurityTokenServiceOperations.ProcessRequest( Request, User as ClaimsPrincipal, CustomSecurityTokenServiceConfiguration.Current.CreateSecurityTokenService(), Response );
        }
    }
}

Uwagi

Aby utworzyć usługę STS, musisz pochodzić od SecurityTokenService klasy.To create an STS you must derive from the SecurityTokenService class. W klasie niestandardowej musisz co najmniej zastąpić GetScope GetOutputClaimsIdentity metody i.In your custom class you must, at a minimum, override the GetScope and GetOutputClaimsIdentity methods. W przypadku tych zastąpień usługa STS utworzona przy użyciu domyślnej implementacji wszystkich innych metod zdefiniowanych w klasie jest w stanie wystawiać tokeny zabezpieczające w odpowiedzi na żądania tokenów zabezpieczających (RST).With these overrides, the STS created using the default implementation of all the other methods defined in the class is capable of issuing security tokens in response to security token requests (RST). Oznacza to, że jest zaimplementowane powiązanie problemu zdefiniowane w specyfikacji WS-Trust.That is, the Issue binding defined in the WS-Trust specification is implemented. To powiązanie jest zaimplementowane w Issue metodzie.This binding is implemented in the Issue method. Żadne inne powiązania WS-Trust (Odnów, Anuluj i sprawdź poprawność) nie są implementowane w domyślnym przypadku, a obiekt wywołujący jest zwracany przez parametr RST, który odpowiada jednemu z tych powiązań.None of the other WS-Trust bindings (Renew, Cancel, and Validate) are implemented in the default case and an appropriate fault is returned to the caller if an RST that corresponds to one of these bindings is encountered. Można oczywiście zastąpić odpowiednie metody ( Renew , Cancel i Validate ), aby zaimplementować te powiązania w usłudze STS.You can, of course, override the appropriate methods (Renew, Cancel, and Validate) to implement these bindings in your STS.

Ważne

Zaimplementowanie usługi STS gotowej do produkcji wiąże się z starannym planowaniem i znaczną ilość zasobów, aby ograniczyć potencjalne zagrożenia bezpieczeństwa związane z ujawnianiem takich usług.Implementing a production-ready STS entails careful planning and considerable resources to mitigate the potential security risks inherent in exposing such a service. Większość deweloperów korzystających z programu Windows Identity Foundation (WIF) będzie opracowywać aplikacje, które umożliwiają zarządzanie tożsamościami w usłudze STS, a nie opracowywanie samej usługi STS.Most developers using Windows Identity Foundation (WIF) will be developing applications that outsource identity management to an STS, rather than developing an STS itself. WIF udostępnia rozszerzenie programu Visual Studio, narzędzie do identyfikacji i dostępu dla programu Visual Studio 2012, aby ułatwić deweloperom testowanie rozwiązań w środowisku deweloperskim.WIF provides a Visual Studio extension, the Identity and Access Tool for Visual Studio 2012, to help developers test solutions in the development environment. To narzędzie obejmuje usługę STS, LocalSTS którą można skonfigurować w taki sposób, aby obsługiwała określone oświadczenia dla opracowywanej aplikacji.This tool includes an STS, LocalSTS, that you can configure to serve specific claims to the application that you are developing. Aby uzyskać więcej informacji na temat narzędzia tożsamości i dostępu, zobacz Narzędzie tożsamości i dostępu dla programu Visual Studio 2012.For more information about the Identity and Access tool, see Identity and Access Tool for Visual Studio 2012. W niektórych scenariuszach program LocalSTS może nie zapewniać funkcjonalności niezbędnej do odpowiedniego przetestowania aplikacji, na przykład w scenariuszu, który obejmuje tworzenie niestandardowego programu obsługi tokenów do użycia przez aplikację.In some scenarios, LocalSTS may not provide the functionality necessary to adequately test your application; for example, in a scenario that involves developing a custom token handler for use by an application. W takich przypadkach można SecurityTokenService utworzyć co najmniej jeden prosty usług STS, który można wdrożyć w środowisku deweloperskim, i który może służyć do testowania takich funkcji w aplikacji.In these cases, you can derive from SecurityTokenService to create one or more simple STSs that can be deployed in your development environment and that can be used to test such features in your application. Pozostała część tej sekcji koncentruje się na metodach ujawnionych przez SecurityTokenService klasę, które umożliwiają wdrożenie prostej usługi STS i przeprowadzenie potoku wystawiania tokenów.The rest of this section focuses on the methods exposed by the SecurityTokenService class that enable you to implement a simple STS and extend the token issuance pipeline.

Poniższa lista zawiera krótkie omówienie metod głównych znaczenia dla deweloperów do użycia w środowisku testowym lub programistycznym.The following list provides a brief overview of the methods of primary importance to the developer for use in a test or development environment.

  • GetScopeMetoda.The GetScope method. Ta metoda zwraca Scope obiekt, który zawiera informacje o RP.This method returns a Scope object that contains information about the RP. Ten obiekt jest używany w pozostałej części potoku wystawiania tokenów i zawiera informacje o poświadczeniach podpisywania i szyfrowania do użycia w odpowiedzi, a także AppliesTo ReplyTo adresy i (jeśli są wymagane).This object is used in the rest of the token issuance pipeline and includes information about the signing and encrypting credentials to use in the response, as well as the AppliesTo and ReplyTo (if required) addresses. Należy zastąpić tę metodę.You must override this method.

  • GetOutputClaimsIdentityMetoda.The GetOutputClaimsIdentity method. Ta metoda zwraca ClaimsIdentity obiekt, który zawiera oświadczenia do zwrócenia do jednostki uzależnionej.This method returns an ClaimsIdentity object that contains the claims to return to the RP. Należy zastąpić tę metodę.You must override this method.

  • IssueMetoda.The Issue method. Ta metoda implementuje potok żądania tokenu, który przetwarza żądanie przychodzącego tokenu zabezpieczającego (RST) i zwraca odpowiedź (RSTR) do obiektu wywołującego, który zawiera token, którego można użyć do uwierzytelniania za pomocą jednostki UZALEŻNIONej.This method implements the token request pipeline, which processes an incoming security token request (RST) and returns a response (RSTR) to the caller that contains a token that can be used to authenticate with an RP. Wiele innych metod zdefiniowanych w SecurityTokenService klasie są wywoływane z tej metody, w tym GetScope GetOutputClaimsIdentity metod i.Many of the other methods defined in the SecurityTokenService class are called from this method, including the GetScope and GetOutputClaimsIdentity methods. Nie jest konieczne przesłonięcie tej metody, ale zrozumienie potoku żądania tokenu może być przydatne.You do not have to override this method, but an understanding of the token request pipeline it implements may be helpful.

Usługa STS jest konfigurowana za pomocą SecurityTokenServiceConfiguration klasy.An STS is configured through the SecurityTokenServiceConfiguration class.

Uwagi dotyczące implementowania

Należy zastępować GetScope(ClaimsPrincipal, RequestSecurityToken) GetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope) metody i.You must override both the GetScope(ClaimsPrincipal, RequestSecurityToken) and the GetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope) methods.

Konstruktory

SecurityTokenService(SecurityTokenServiceConfiguration)

Wywoływana z klas pochodnych w celu zainicjowania SecurityTokenService klasy przy użyciu określonych ustawień konfiguracji.Called from derived classes to initialize the SecurityTokenService class using the specified configuration settings.

Właściwości

Principal

Pobiera lub ustawia podmiot zabezpieczeń skojarzony z bieżącym wystąpieniem.Gets or sets the principal associated with the current instance.

Request

Pobiera lub ustawia żądanie tokenu zabezpieczającego (RST) skojarzone z bieżącym wystąpieniem.Gets or sets the security token request (RST) associated with the current instance.

Scope

Pobiera lub ustawia zakres skojarzony z bieżącym wystąpieniem.Gets or sets the scope associated with the current instance.

SecurityTokenDescriptor

Pobiera lub ustawia SecurityTokenDescriptor skojarzenie z bieżącym wystąpieniem.Gets or sets the SecurityTokenDescriptor associated with the current instance.

SecurityTokenServiceConfiguration

Pobiera wystąpienie konfiguracji właściciela.Gets the owner configuration instance.

Metody

BeginCancel(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna asynchroniczne żądanie anulowania WS-Trust.When overridden in a derived class, begins an asynchronous WS-Trust Cancel request.

BeginGetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna asynchroniczne wywołanie GetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope) metody.When overridden in a derived class, begins an asynchronous call to the GetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope) method.

BeginGetScope(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna wywołanie asynchroniczne dla GetScope(ClaimsPrincipal, RequestSecurityToken) metody.When overridden in a derived class, begins an asynchronous call for the GetScope(ClaimsPrincipal, RequestSecurityToken) method.

BeginIssue(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna asynchroniczne żądanie protokołu WS-Trust.When overridden in a derived class, begins an asynchronous WS-Trust Issue request.

BeginRenew(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna asynchroniczne żądanie odnowienia WS-Trust.When overridden in a derived class, begins an asynchronous WS-Trust Renew request.

BeginValidate(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object)

Gdy jest zastępowany w klasie pochodnej, rozpoczyna asynchroniczne żądanie weryfikacji WS-Trust.When overridden in a derived class, begins an asynchronous WS-Trust Validate request.

Cancel(ClaimsPrincipal, RequestSecurityToken)

Gdy jest zastępowany w klasie pochodnej, przetwarza żądanie anulowania usługi WS-Trust.When overridden in a derived class, processes a WS-Trust Cancel request.

CreateSecurityTokenDescriptor(RequestSecurityToken, Scope)

Tworzy wystąpienie elementu SecurityTokenDescriptor .Creates an instance of a SecurityTokenDescriptor.

EndCancel(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, kończy asynchroniczne żądanie anulowania WS-Trust.When overridden in a derived class, completes the asynchronous WS-Trust Cancel request.

EndGetOutputClaimsIdentity(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, uzupełnia asynchroniczne wywołanie BeginGetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope, AsyncCallback, Object) metody.When overridden in a derived class, completes the asynchronous call to the BeginGetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope, AsyncCallback, Object) method.

EndGetScope(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, uzupełnia asynchroniczne wywołanie BeginGetScope(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object) metody.When overridden in a derived class, completes the asynchronous call to the BeginGetScope(ClaimsPrincipal, RequestSecurityToken, AsyncCallback, Object) method.

EndIssue(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, kończy asynchroniczne żądanie problemu z WS-trustem.When overridden in a derived class, completes the asynchronous WS-Trust Issue request.

EndRenew(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, kończy asynchroniczne żądanie odnowienia WS-Trust.When overridden in a derived class, completes the asynchronous WS-Trust Renew request.

EndValidate(IAsyncResult)

Gdy jest zastępowany w klasie pochodnej, uzupełnia asynchroniczne żądanie weryfikacji WS-Trust.When overridden in a derived class, completes the asynchronous WS-Trust Validate request.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetIssuerName()

Pobiera nazwę usługi tokenu zabezpieczającego (STS).Gets the name of the security token service (STS).

GetOutputClaimsIdentity(ClaimsPrincipal, RequestSecurityToken, Scope)

Gdy jest zastępowany w klasie pochodnej, ta metoda zwraca kolekcję tematów wyjściowych, które mają być uwzględnione w wystawionym tokenie.When overridden in a derived class, this method returns a collection of output subjects to be included in the issued token.

GetProofToken(RequestSecurityToken, Scope)

Pobiera token potwierdzający, który ma zostać uwzględniony w odpowiedzi (RSTR).Gets the proof token to be included in the response (RSTR).

GetRequestorProofEncryptingCredentials(RequestSecurityToken)

Pobiera poświadczenia szyfrowania dowodu żądającego.Gets the requestor's proof encrypting credentials.

GetResponse(RequestSecurityToken, SecurityTokenDescriptor)

Tworzy odpowiedź (RSTR), która zawiera wystawiony token przy użyciu określonego żądania (RST) i deskryptora tokenu zabezpieczającego.Creates the response (RSTR) that contains the issued token by using the specified request (RST) and security token descriptor.

GetScope(ClaimsPrincipal, RequestSecurityToken)

Pobiera Scope obiekt, który zawiera informacje o jednostce uzależnionej (RP) skojarzone z określonym żądaniem (RST).Gets a Scope object that contains information about the relying party (RP) associated with the specified request (RST). Należy zastąpić tę metodę w implementacji SecurityTokenService klasy.You must override this method in your implementation of the SecurityTokenService class.

GetSecurityTokenHandler(String)

Pobiera odpowiedni program obsługi tokenów zabezpieczających do wystawiania tokenu zabezpieczającego określonego typu.Gets the appropriate security token handler for issuing a security token of the specified type.

GetTokenLifetime(Lifetime)

Pobiera okres istnienia wystawionego tokenu.Gets the lifetime for the issued token.

GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
Issue(ClaimsPrincipal, RequestSecurityToken)

Wystawia token zabezpieczający.Issues a security token.

MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
Renew(ClaimsPrincipal, RequestSecurityToken)

Gdy jest zastępowany w klasie pochodnej, przetwarza żądanie odnowienia WS-Trust.When overridden in a derived class, processes a WS-Trust Renew request.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)
Validate(ClaimsPrincipal, RequestSecurityToken)

Gdy jest zastępowany w klasie pochodnej, przetwarza żądanie weryfikacji WS-Trust.When overridden in a derived class, processes a WS-Trust Validate request.

ValidateRequest(RequestSecurityToken)

Sprawdza poprawność żądania tokenu zabezpieczającego hermetyzowanego przez to wystąpienie.Validates the security token request (RST) encapsulated by this instance.

Dotyczy

Zobacz też