Bagikan melalui


SecurityToken Kelas

Definisi

Mewakili kelas dasar yang digunakan untuk mengimplementasikan semua token keamanan.

public ref class SecurityToken abstract
public abstract class SecurityToken
type SecurityToken = class
Public MustInherit Class SecurityToken
Warisan
SecurityToken
Turunan

Contoh

Contoh kode yang digunakan dalam SecurityToken topik diambil dari Custom Token sampel. Sampel ini menyediakan kelas kustom yang memungkinkan pemrosesan Simple Web Tokens (SWT). Ini termasuk implementasi SimpleWebToken kelas dan SimpleWebTokenHandler kelas, serta kelas lain yang mendukung token SWT. Untuk informasi tentang sampel ini dan sampel lain yang tersedia untuk WIF dan tentang tempat mengunduhnya, lihat Indeks Sampel Kode WIF. Kode berikut menunjukkan implementasi SimpleWebToken kelas . Kelas ini memperluas 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 );
        } 
    }    
}

Keterangan

Gunakan token keamanan untuk memberikan kredensial autentikasi atau untuk melindungi pesan.

Token keamanan dapat digunakan untuk memberikan kredensial autentikasi, materi kunci kriptografi, atau, dalam kasus token keamanan yang dikeluarkan oleh layanan token keamanan (STS), kumpulan klaim tentang subjek. Semua token keamanan berasal dari SecurityToken kelas .

Dimulai dengan .NET 4.5, Windows Identity Foundation (WIF) telah sepenuhnya diintegrasikan ke dalam .NET Framework dan kelas yang diekspos oleh WIF adalah metode penanganan token keamanan yang disukai dalam kode Anda. Di WIF, token keamanan diserialisasikan dan dideserialisasi ke dan dari representasi XML mereka dan divalidasi dengan menggunakan kelas yang berasal dari SecurityTokenHandler kelas dasar. Memvalidasi token tidak hanya melibatkan memastikan bahwa token valid, tetapi juga mengembalikan ClaimsIdentity instans dari token yang dapat digunakan dalam membuat keputusan autentikasi dan otorisasi. ClaimsIdentity dibangun oleh implementasi handler token dari ValidateToken klaim yang terkandung dalam token serta dari klaim yang intrinsik ke jenis token itu sendiri.

WIF dikirim dengan dukungan untuk jenis token keamanan berikut:

  • Saml2SecurityToken: Mewakili token keamanan yang didasarkan pada Pernyataan SAML 2.0. Jenis token ini biasanya dikeluarkan oleh layanan token keamanan sebagai respons terhadap permintaan token keamanan (RST) WS-Trust atau WS-Federation.

  • SamlSecurityToken: Mewakili token keamanan yang didasarkan pada Pernyataan SAML 1.1. Jenis token ini biasanya dikeluarkan oleh layanan token keamanan sebagai respons terhadap permintaan token keamanan (RST) WS-Trust atau WS-Federation.

  • KerberosRequestorSecurityToken dan KerberosReceiverSecurityToken: Mewakili token keamanan yang didasarkan pada tiket Kerberos yang diterima atau dikirim dalam pesan SOAP

  • RsaSecurityToken: Mewakili token keamanan yang didasarkan pada kunci yang dibuat menggunakan algoritma RSA.

  • SessionSecurityToken: Mewakili token keamanan yang berisi informasi tentang sesi.

  • UserNameSecurityToken: Mewakili token keamanan yang didasarkan pada nama pengguna dan kata sandi.

  • WindowsSecurityToken: Mewakili token keamanan yang didasarkan pada identitas domain Windows atau akun pengguna.

  • X509SecurityToken: Mewakili token keamanan yang didasarkan pada sertifikat X.509.

  • X509WindowsSecurityToken: Mewakili token keamanan yang didasarkan pada sertifikat X.509 yang dipetakan ke pengguna domain Windows atau akun pengguna komputer lokal.

Dua kelas token keamanan lainnya, GenericXmlSecurityToken dan EncryptedSecurityToken, dapat digunakan untuk membantu menangani kasus umum.

Token keamanan yang berbahasa luas termasuk dalam tiga kategori utama:

  • Token yang membawa atau mereferensikan materi kunci kriptografi. Misalnya RsaSecurityToken jenis dan X509SecurityToken sering digunakan untuk tujuan ini.

  • Token yang mewakili kredensial untuk pengguna yang telah diautentikasi. Misalnya, UserNameSecurityToken, WindowsSecurityToken, dan, dalam kasus pengguna diautentikasi menggunakan sertifikat, jenisnya X509SecurityToken .

  • Token yang dikeluarkan oleh layanan token keamanan (STS) sebagai respons terhadap permintaan token keamanan menggunakan protokol WS-Trust atau WS-Federation. Ini biasanya dikembalikan dalam wst:RequestSecurityTokenResponse fragmen XML. Jenis Saml2SecurityToken dan SamlSecurityToken paling sering digunakan untuk mewakili token ini.

Jenis token khusus, SessionSecurityToken, berisi informasi yang diperlukan untuk membuat ulang prinsipal saat menggunakan sesi dalam skenario aktif atau pasif.

Untuk menambahkan fungsionalitas ke jenis token yang ada, Anda dapat memperoleh dari jenis tertentu dan penangan token terkait untuk mendukung elemen baru yang Anda tambahkan ke token. Untuk menambahkan dukungan untuk jenis token baru, Anda dapat memperoleh langsung dari SecurityToken kelas . Ketika Anda melakukan ini, Anda juga perlu membuat kelas handler token dengan berasal dari SecurityTokenHandler kelas . Bergantung pada bagaimana token Anda akan digunakan, Anda mungkin juga perlu membuat resolver token kustom dengan berasal dari IssuerTokenResolver kelas serta satu atau beberapa jenis klausa pengidentifikasi kunci kustom dengan berasal dari SecurityKeyIdentifierClause kelas .

Catatan Bagi Implementer

Anda harus mengambil alih Idproperti , , SecurityKeysValidFrom, dan ValidTo . Metode CanCreateKeyIdentifierClause<T>(), CreateKeyIdentifierClause<T>(), MatchesKeyIdentifierClause(SecurityKeyIdentifierClause), dan ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) semua mendukung pengidentifikasi kunci jenis LocalIdKeyIdentifierClause. Anda harus mengambil alih metode ini untuk mendukung jenis pengidentifikasi kunci lainnya di kelas turunan Anda.

Konstruktor

SecurityToken()

Dipanggil oleh konstruktor di kelas turunan SecurityToken untuk menginisialisasi kelas.

Properti

Id

Mendapatkan pengidentifikasi unik token keamanan.

SecurityKeys

Mendapatkan kunci kriptografi yang terkait dengan token keamanan.

ValidFrom

Mendapatkan instans pertama pada waktu di mana token keamanan ini valid.

ValidTo

Mendapatkan instan waktu terakhir di mana token keamanan ini valid.

Metode

CanCreateKeyIdentifierClause<T>()

Mendapatkan nilai yang menunjukkan apakah token keamanan ini mampu membuat pengidentifikasi kunci yang ditentukan.

CreateKeyIdentifierClause<T>()

Membuat klausa pengidentifikasi kunci yang ditentukan.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MatchesKeyIdentifierClause(SecurityKeyIdentifierClause)

Mengembalikan nilai yang menunjukkan apakah pengidentifikasi kunci untuk instans ini dapat diselesaikan ke pengidentifikasi kunci yang ditentukan.

MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ResolveKeyIdentifierClause(SecurityKeyIdentifierClause)

Mendapatkan kunci untuk klausa pengidentifikasi kunci yang ditentukan.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga