SecurityToken Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine Basisklasse dar, die verwendet wird, um alle Sicherheitstoken zu implementieren.
public ref class SecurityToken abstract
public abstract class SecurityToken
type SecurityToken = class
Public MustInherit Class SecurityToken
- Vererbung
-
SecurityToken
- Abgeleitet
Beispiele
Die Codebeispiele, die in den SecurityToken Themen verwendet werden, stammen aus dem Custom Token
Beispiel. Dieses Beispiel enthält benutzerdefinierte Klassen, die die Verarbeitung von Simple Web Token (SWT) ermöglichen. Es enthält eine Implementierung einer SimpleWebToken
Klasse und einer SimpleWebTokenHandler
Klasse sowie andere Klassen, die SWT-Token unterstützen. Informationen zu diesem Beispiel und anderen für WIF verfügbaren Beispielen und zu deren Downloadmöglichkeiten finden Sie unter WIF-Codebeispielindex. Der folgende Code zeigt die Implementierung der SimpleWebToken
-Klasse. Diese Klasse erweitert SecurityToken.
/// <summary>
/// Defines the set of constants for the Simple Web Token.
/// </summary>
public static class SimpleWebTokenConstants
{
public const string Audience = "Audience";
public const string ExpiresOn = "ExpiresOn";
public const string Id = "Id";
public const string Issuer = "Issuer";
public const string Signature = "HMACSHA256";
public const string ValidFrom = "ValidFrom";
public const string ValueTypeUri = "http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0";
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.IdentityModel.Tokens;
namespace SimpleWebToken
{
/// <summary>
/// This class represents the token format for the SimpleWebToken.
/// </summary>
public class SimpleWebToken : SecurityToken
{
public static DateTime SwtBaseTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0 ); // per SWT psec
NameValueCollection _properties;
string _serializedToken;
/// <summary>
/// Initializes a new instance of the <see cref="SimpleWebToken"/> class.
/// This is an internal constructor that is only called from the <see cref="SimpleWebTokenHandler"/> when reading a token received from the wire.
/// </summary>
/// <param name="properties">The collection representing all the key value pairs in the token.</param>
/// <param name="serializedToken">The serialized form of the token.</param>
internal SimpleWebToken( NameValueCollection properties, string serializedToken )
: this(properties)
{
_serializedToken = serializedToken;
}
/// <summary>
/// Initializes a new instance of the <see cref="SimpleWebToken"/> class.
/// </summary>
/// <param name="properties">The collection representing all the key value pairs in the token.</param>
public SimpleWebToken( NameValueCollection properties )
{
if ( properties == null )
{
throw new ArgumentNullException( "properties" );
}
_properties = properties;
}
/// <summary>
/// Gets the Id of the token.
/// </summary>
/// <value>The Id of the token.</value>
public override string Id
{
get
{
return _properties[SimpleWebTokenConstants.Id];
}
}
/// <summary>
/// Gets the keys associated with this token.
/// </summary>
/// <value>The keys associated with this token.</value>
public override ReadOnlyCollection<SecurityKey> SecurityKeys
{
get
{
return new ReadOnlyCollection<SecurityKey>( new List<SecurityKey>() );
}
}
/// <summary>
/// Gets the time from when the token is valid.
/// </summary>
/// <value>The time from when the token is valid.</value>
public override DateTime ValidFrom
{
get
{
string validFrom = _properties[SimpleWebTokenConstants.ValidFrom];
return GetTimeAsDateTime( String.IsNullOrEmpty( validFrom ) ? "0" : validFrom );
}
}
/// <summary>
/// Gets the time when the token expires.
/// </summary>
/// <value>The time up to which the token is valid.</value>
public override DateTime ValidTo
{
get
{
string expiryTime = _properties[SimpleWebTokenConstants.ExpiresOn];
return GetTimeAsDateTime( String.IsNullOrEmpty( expiryTime ) ? "0" : expiryTime );
}
}
/// <summary>
/// Gets the Audience for the token.
/// </summary>
/// <value>The audience of the token.</value>
public string Audience
{
get
{
return _properties[SimpleWebTokenConstants.Audience];
}
}
/// <summary>
/// Gets the Issuer for the token.
/// </summary>
/// <value>The issuer for the token.</value>
public string Issuer
{
get
{
return _properties[SimpleWebTokenConstants.Issuer];
}
}
/// <summary>
/// Gets the signature for the token.
/// </summary>
/// <value>The signature for the token.</value>
public string Signature
{
get
{
return _properties[SimpleWebTokenConstants.Signature];
}
}
/// <summary>
/// Gets the serialized form of the token if the token was created from its serialized form by the token handler.
/// </summary>
/// <value>The serialized form of the token.</value>
public string SerializedToken
{
get
{
return _serializedToken;
}
}
/// <summary>
/// Creates a copy of all key value pairs of the token.
/// </summary>
/// <returns>A copy of all the key value pairs in the token.</returns>
public NameValueCollection GetAllProperties()
{
return new NameValueCollection( _properties );
}
/// <summary>
/// Converts the time in seconds to a <see cref="DateTime"/> object based on the base time
/// defined by the Simple Web Token.
/// </summary>
/// <param name="expiryTime">The time in seconds.</param>
/// <returns>The time as a <see cref="DateTime"/> object.</returns>
protected virtual DateTime GetTimeAsDateTime( string expiryTime )
{
long totalSeconds = 0;
if ( !long.TryParse( expiryTime, out totalSeconds ) )
{
throw new SecurityTokenException("Invalid expiry time. Expected the time to be in seconds passed from 1 January 1970.");
}
long maxSeconds = (long)( DateTime.MaxValue - SwtBaseTime ).TotalSeconds - 1;
if ( totalSeconds > maxSeconds )
{
totalSeconds = maxSeconds;
}
return SwtBaseTime.AddSeconds( totalSeconds );
}
}
}
Hinweise
Verwenden Sie ein Sicherheitstoken, um Authentifizierungsinformationen bereitzustellen oder eine Meldung zu schützen.
Ein Sicherheitstoken kann verwendet werden, um Authentifizierungsanmeldeinformationen, kryptografisches Schlüsselmaterial oder im Fall eines Sicherheitstokens, das von einem Sicherheitstokendienst (STS) ausgestellt wurde, eine Sammlung von Ansprüchen zu einem Antragsteller bereitzustellen. Alle Sicherheitstoken werden von der SecurityToken -Klasse abgeleitet.
Ab .NET 4.5 wurde Windows Identity Foundation (WIF) vollständig in die .NET Framework integriert, und die von WIF verfügbar gemachten Klassen sind die bevorzugte Methode für die Verarbeitung von Sicherheitstoken in Ihrem Code. In WIF werden Sicherheitstoken serialisiert und aus ihrer XML-Darstellung deserialisiert und überprüft, indem von der SecurityTokenHandler Basisklasse abgeleitete Klassen verwendet werden. Die Überprüfung eines Tokens umfasst nicht nur die Sicherstellung, dass das Token gültig ist, sondern auch die Rückgabe einer ClaimsIdentity instance aus dem Token, die bei Authentifizierungs- und Autorisierungsentscheidungen verwendet werden kann. Die ClaimsIdentity wird durch die Implementierung der -Methode des ValidateToken Tokenhandlers aus den im Token enthaltenen Ansprüchen sowie von Ansprüchen erstellt, die für den Tokentyp selbst intrinsisch sind.
WIF bietet Unterstützung für die folgenden Arten von Sicherheitstoken:
Saml2SecurityToken: Stellt ein Sicherheitstoken dar, das auf einer SAML 2.0-Assertion basiert. Dieser Tokentyp wird in der Regel von einem Sicherheitstokendienst als Reaktion auf eine WS-Trust oder WS-Federation Sicherheitstokenanforderung (Security Token Request, RST) ausgegeben.
SamlSecurityToken: Stellt ein Sicherheitstoken dar, das auf einer SAML 1.1-Assertion basiert. Dieser Tokentyp wird in der Regel von einem Sicherheitstokendienst als Reaktion auf eine WS-Trust oder WS-Federation Sicherheitstokenanforderung (Security Token Request, RST) ausgegeben.
KerberosRequestorSecurityToken und KerberosReceiverSecurityToken: Stellt ein Sicherheitstoken dar, das auf einem Kerberos-Ticket basiert, das in einer SOAP-Nachricht empfangen oder gesendet wird.
RsaSecurityToken: Stellt ein Sicherheitstoken dar, das auf einem Schlüssel basiert, der mit dem RSA-Algorithmus erstellt wird.
SessionSecurityToken: Stellt ein Sicherheitstoken dar, das Informationen zu einer Sitzung enthält.
UserNameSecurityToken: Stellt ein Sicherheitstoken dar, das auf einem Benutzernamen und kennwort basiert.
WindowsSecurityToken: Stellt ein Sicherheitstoken dar, das auf der Identität einer Windows-Domäne oder eines Windows-Benutzerkontos basiert.
X509SecurityToken: Stellt ein Sicherheitstoken dar, das auf einem X.509-Zertifikat basiert.
X509WindowsSecurityToken: Stellt ein Sicherheitstoken dar, das auf einem X.509-Zertifikat basiert, das einem Windows-Domänenbenutzer oder einem lokalen Computerbenutzerkonto zugeordnet ist.
Zwei weitere Sicherheitstokenklassen und können verwendet werden, GenericXmlSecurityTokenEncryptedSecurityTokenum allgemeine Fälle zu behandeln.
Im Allgemeinen fallen Sicherheitstoken in drei Hauptkategorien:
Token, die kryptografisches Schlüsselmaterial enthalten oder darauf verweisen. Zu diesem Zweck werden z. B. häufig die RsaSecurityToken Typen und X509SecurityToken verwendet.
Token, die Anmeldeinformationen für Benutzer darstellen, die bereits authentifiziert wurden. Beispielsweise , und, im Fall eines Benutzers, UserNameSecurityTokenWindowsSecurityTokender mit einem Zertifikat authentifiziert wurde, die X509SecurityToken Typen.
Token, die von einem Sicherheitstokendienst (SECURITY Token Service, STS) als Reaktion auf eine Sicherheitstokenanforderung mithilfe des WS-Trust- oder WS-Federation-Protokolls ausgestellt werden. Diese werden in der Regel in einem
wst:RequestSecurityTokenResponse
XML-Fragment zurückgegeben. Die Saml2SecurityToken Typen und SamlSecurityToken werden am häufigsten verwendet, um diese Token darzustellen.
Ein spezieller Tokentyp, der , enthält Informationen, die SessionSecurityTokenerforderlich sind, um einen Prinzipal neu zu erstellen, wenn Sitzungen in aktiven oder passiven Szenarien verwendet werden.
Um vorhandenen Tokentypen Funktionen hinzuzufügen, können Sie vom spezifischen Typ und dem zugehörigen Tokenhandler abgeleitet werden, um alle neuen Elemente zu unterstützen, die Sie dem Token hinzufügen. Um Unterstützung für neue Tokentypen hinzuzufügen, können Sie direkt von der SecurityToken -Klasse ableiten. In diesem Fall müssen Sie auch eine Tokenhandlerklasse erstellen, indem Sie von der SecurityTokenHandler -Klasse ableiten. Je nachdem, wie Ihr Token verwendet werden soll, müssen Sie möglicherweise auch einen benutzerdefinierten Tokenrelöser erstellen, indem Sie von der IssuerTokenResolver -Klasse abgeleitet werden, sowie einen oder mehrere benutzerdefinierte Schlüsselbezeichnerklauseltypen durch Ableiten von der SecurityKeyIdentifierClause -Klasse erstellen.
Hinweise für Ausführende
Sie müssen die IdEigenschaften , SecurityKeys, ValidFromund ValidTo überschreiben. Die CanCreateKeyIdentifierClause<T>()Methoden , CreateKeyIdentifierClause<T>(), MatchesKeyIdentifierClause(SecurityKeyIdentifierClause)und ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) unterstützen alle Schlüsselbezeichner des Typs LocalIdKeyIdentifierClause. Sie müssen diese Methoden überschreiben, um andere Schlüsselbezeichnertypen in Ihrer abgeleiteten Klasse zu unterstützen.
Konstruktoren
SecurityToken() |
Wird von Konstruktoren in abgeleiteten Klassen aufgerufen, um die SecurityToken-Klasse zu initialisieren. |
Eigenschaften
Id |
Ruft einen eindeutigen Bezeichner für das Sicherheitstoken ab. |
SecurityKeys |
Ruft die dem Sicherheitstoken zugeordneten kryptografischen Schlüssel ab. |
ValidFrom |
Ruft den ersten Zeitpunkt ab, zu dem dieses Sicherheitstoken gültig ist. |
ValidTo |
Ruft den spätest möglichen Zeitpunkt ab, zu dem dieses Sicherheitstoken gültig ist. |
Methoden
CanCreateKeyIdentifierClause<T>() |
Ruft einen Wert ab, der angibt, ob dieses Sicherheitstoken den angegebenen Schlüsselbezeichner erstellen kann. |
CreateKeyIdentifierClause<T>() |
Erstellt die angegebene Schlüsselbezeichnerklausel. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MatchesKeyIdentifierClause(SecurityKeyIdentifierClause) |
Gibt einen Wert zurück, der angibt, ob der Schlüsselbezeichner für diese Instanz auf den angegebenen Schlüsselbezeichner aufgelöst werden kann. |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) |
Ruft den Schlüssel für die angegebene Schlüsselbezeichnerklausel ab. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |