Afficher en anglais

Partage via


UserNameSecurityTokenAuthenticator Classe

Définition

Authentifie un jeton de sécurité UserNameSecurityToken.

C#
public abstract class UserNameSecurityTokenAuthenticator : System.IdentityModel.Selectors.SecurityTokenAuthenticator
Héritage
UserNameSecurityTokenAuthenticator
Dérivé

Exemples

C#
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;
        }
    }
}

Remarques

Substituez la classe UserNameSecurityTokenAuthenticator pour authentifier les jetons de sécuritɠbasés sur un nom d'utilisateur et un mot de passe.

Windows Communication Foundation est fourni avec les classes suivantes qui prennent en charge l’authentification UserNameSecurityToken des jetons de sécurité.

Type Description
CustomUserNameSecurityTokenAuthenticator Permet à une application de fournir un schéma d'authentification personnalisé pour les noms d'utilisateur et les mots de passe. Le schéma d'authentification est fourni à l'aide d'une classe dérivant de la classe UserNamePasswordValidator.
WindowsUserNameSecurityTokenAuthenticator Authentifie le nom d'utilisateur et le mot de passe en tant que compte Windows.

La plupart des schémas d'authentification personnalisés peuvent utiliser la classe CustomUserNameSecurityTokenAuthenticator et implémenter une classe qui dérive de la classe UserNamePasswordValidator. Toutefois, si plus de souplesse est nécessaire, vous pouvez dériver une classe de la classe UserNameSecurityTokenAuthenticator et substituer la méthode ValidateUserNamePasswordCore.

Constructeurs

UserNameSecurityTokenAuthenticator()

Initialise une nouvelle instance de la classe UserNameSecurityTokenAuthenticator.

Méthodes

CanValidateToken(SecurityToken)

Obtient une valeur indiquant si le jeton de sécurité spécifié peut être validé par cet authentificateur de jeton de sécurité.

(Hérité de SecurityTokenAuthenticator)
CanValidateTokenCore(SecurityToken)

Obtient une valeur indiquant si le jeton de sécurité spécifié peut être validé par cet authentificateur de jeton de sécurité.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
ValidateToken(SecurityToken)

Authentifie le jeton de sécurité spécifié et retourne le jeu de stratégies d'autorisation pour le jeton de sécurité.

(Hérité de SecurityTokenAuthenticator)
ValidateTokenCore(SecurityToken)

Authentifie le jeton de sécurité spécifié et retourne le jeu de stratégies d'autorisation pour le jeton de sécurité.

ValidateUserNamePasswordCore(String, String)

En cas de substitution dans une classe dérivée, authentifie le nom d'utilisateur et le mot de passe spécifiés et retourne le jeu de stratégies d'autorisation pour les jetons de sécurité UserNameSecurityToken.

S’applique à

Produit Versions
.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