Auf Englisch lesen

Freigeben über


UserNameSecurityTokenAuthenticator Klasse

Definition

Authentifiziert ein UserNameSecurityToken-Sicherheitstoken.

public abstract class UserNameSecurityTokenAuthenticator : System.IdentityModel.Selectors.SecurityTokenAuthenticator
Vererbung
UserNameSecurityTokenAuthenticator
Abgeleitet

Beispiele

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Security.Principal;
using System.ServiceModel.Security;
using System.Text.RegularExpressions;

namespace Microsoft.ServiceModel.Samples
{
    class MyTokenAuthenticator : UserNameSecurityTokenAuthenticator
    {
        static bool IsRogueDomain(string domain)
        {
            return false;
        }
        static bool IsEmail(string inputEmail)
        {

            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                  @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                  @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            if (re.IsMatch(inputEmail))
                return (true);
            else
                return (false);
        }

        bool ValidateUserNameFormat(string UserName)
        {
            if (!IsEmail(UserName))
            {
                Console.WriteLine("Not a valid email");
                return false;
            }
            string[] emailAddress = UserName.Split('@');
            string user = emailAddress[0];
            string domain = emailAddress[1];
            if (IsRogueDomain(domain))
                return false;
            return true;
        }
        protected override ReadOnlyCollection<IAuthorizationPolicy> ValidateUserNamePasswordCore(string userName, string password)
        {
            if (!ValidateUserNameFormat(userName))
                throw new SecurityTokenValidationException("Incorrect UserName format");

            ClaimSet claimSet = new DefaultClaimSet(ClaimSet.System, new Claim(ClaimTypes.Name, userName, Rights.PossessProperty));
            List<IIdentity> identities = new List<IIdentity>(1);
            identities.Add(new GenericIdentity(userName));
            List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>(1);
            policies.Add(new UnconditionalPolicy(ClaimSet.System, claimSet, DateTime.MaxValue.ToUniversalTime(), identities));
            return policies.AsReadOnly();
        }
    }

    class UnconditionalPolicy : IAuthorizationPolicy
    {
        string id = Guid.NewGuid().ToString();
        ClaimSet issuer;
        ClaimSet issuance;
        DateTime expirationTime;
        IList<IIdentity> identities;

        public UnconditionalPolicy(ClaimSet issuer, ClaimSet issuance, DateTime expirationTime, IList<IIdentity> identities)
        {
            if (issuer == null)
                throw new ArgumentNullException("issuer");
            if (issuance == null)
                throw new ArgumentNullException("issuance");

            this.issuer = issuer;
            this.issuance = issuance;
            this.identities = identities;
            this.expirationTime = expirationTime;
        }

        public string Id
        {
            get { return this.id; }
        }

        public ClaimSet Issuer
        {
            get { return this.issuer; }
        }

        public DateTime ExpirationTime
        {
            get { return this.expirationTime; }
        }

        public bool Evaluate(EvaluationContext evaluationContext, ref object state)
        {
            evaluationContext.AddClaimSet(this, this.issuance);

            if (this.identities != null)
            {
                object value;
                IList<IIdentity> contextIdentities;
                if (!evaluationContext.Properties.TryGetValue("Identities", out value))
                {
                    contextIdentities = new List<IIdentity>(this.identities.Count);
                    evaluationContext.Properties.Add("Identities", contextIdentities);
                }
                else
                {
                    contextIdentities = value as IList<IIdentity>;
                }
                foreach (IIdentity identity in this.identities)
                {
                    contextIdentities.Add(identity);
                }
            }

            evaluationContext.RecordExpirationTime(this.expirationTime);
            return true;
        }
    }
}

Hinweise

Überschreiben Sie die UserNameSecurityTokenAuthenticator-Klasse, um Sicherheitstoken auf Grundlage von einem Benutzernamen und einem Kennwort zu authentifizieren.

Windows Communication Foundation wird mit den folgenden Klassen ausgeliefert, die Unterstützung für die Authentifizierung von Sicherheitstoken UserNameSecurityToken bieten.

Typ Beschreibung
CustomUserNameSecurityTokenAuthenticator Ermöglicht es einer Anwendung, ein benutzerdefiniertes Authentifizierungsschema für Benutzernamen und Kennwörter bereitzustellen. Das Authentifizierungsschema wird mit einer Klasse bereitgestellt, die von der UserNamePasswordValidator-Klasse abgeleitet wird.
WindowsUserNameSecurityTokenAuthenticator Authentifiziert den Benutzernamen und das Kennwort als Windows-Konto.

Die meisten Authentifizierungsschemen verwenden die CustomUserNameSecurityTokenAuthenticator-Klasse und implementieren eine Klasse, die von der UserNamePasswordValidator-Klasse abgeleitet wird. Wenn allerdings zusätzliche Flexibilität erforderlich ist, können Sie eine Klasse von der UserNameSecurityTokenAuthenticator-Klasse ableiten und die ValidateUserNamePasswordCore-Methode überschreiben.

Konstruktoren

UserNameSecurityTokenAuthenticator()

Initialisiert eine neue Instanz der UserNameSecurityTokenAuthenticator-Klasse.

Methoden

CanValidateToken(SecurityToken)

Ruft einen Wert ab, der angibt, ob das angegebene Sicherheitstoken von diesem Sicherheitstoken-Authentifikator überprüft werden kann.

(Geerbt von SecurityTokenAuthenticator)
CanValidateTokenCore(SecurityToken)

Ruft einen Wert ab, der angibt, ob das angegebene Sicherheitstoken von diesem Sicherheitstoken-Authentifikator überprüft werden kann.

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)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
ValidateToken(SecurityToken)

Authentifiziert das angegebene Sicherheitstoken und gibt den Satz von Autorisierungsrichtlinien für das Sicherheitstoken zurück.

(Geerbt von SecurityTokenAuthenticator)
ValidateTokenCore(SecurityToken)

Authentifiziert das angegebene Sicherheitstoken und gibt den Satz von Autorisierungsrichtlinien für das Sicherheitstoken zurück.

ValidateUserNamePasswordCore(String, String)

Authentifiziert beim Überschreiben in einer abgeleiteten Klasse den angegebenen Benutzernamen und das Kennwort und gibt den Satz von Autorisierungsrichtlinien für UserNameSecurityToken-Sicherheitstoken zurück.

Gilt für:

Produkt Versionen
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1