Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette procédure pas à pas fournit des instructions pour implémenter une méthode d’authentification personnalisée pour AD FS dans Windows Server 2012 R2. Pour plus d’informations, consultez Méthodes d’authentification supplémentaires.
Avertissement
L’exemple que vous pouvez créer ici est uniquement à des fins éducatives. Ces instructions concernent l’implémentation la plus simple et la plus minimale possible pour exposer les éléments requis du modèle. Il n’existe aucun back-end d’authentification, traitement des erreurs ou données de configuration.
Configuration de l'environnement de développement
Cette procédure pas à pas utilise Visual Studio 2012. Le projet peut être généré à l’aide de n’importe quel environnement de développement qui peut créer une classe .NET pour Windows. Le projet doit cibler .NET 4.5, car les méthodes BeginAuthentication et TryEndAuthentication utilisent le type System.Security.Claims.Claim, partie de .NET Framework version 4.5. Il existe une référence requise pour le projet :
Dll de référence | Comment y accéder | Obligatoire pour |
---|---|---|
Microsoft.IdentityServer.Web.dll | La dll se trouve dans %windir%\ADFS sur un serveur Windows Server 2012 R2 sur lequel AD FS a été installé. Cette dll doit être copiée sur l’ordinateur de développement et une référence explicite créée dans le projet. |
Types d’interface, y compris IAuthenticationContext, IProofData |
Créer le fournisseur
Dans Visual Studio 2012 : Choisir fichier-nouveau-projet>>...
Sélectionnez La bibliothèque de classes et assurez-vous que vous ciblez .NET 4.5.
Effectuez une copie de Microsoft.IdentityServer.Web.dll à partir de %windir%\ADFS sur le serveur Windows Server 2012 R2 où AD FS a été installé et collez-le dans votre dossier Project sur votre ordinateur de développement.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Références et Ajoutez une référence...
Accédez à votre copie locale de Microsoft.IdentityServer.Web.dll et ajoutez...
Cliquez sur OK pour confirmer la nouvelle référence :
Vous devez à présent être configuré pour résoudre tous les types requis pour le fournisseur.
Ajouter une nouvelle classe à votre projet (cliquez avec le bouton droit sur votre projet, Ajouter... Classe...) et donnez-lui un nom tel que MyAdapter, illustré ci-dessous :
Dans le nouveau fichier MyAdapter.cs, remplacez le code existant par les éléments suivants :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Globalization; using System.IO; using System.Net; using System.Xml.Serialization; using Microsoft.IdentityServer.Web.Authentication.External; using Claim = System.Security.Claims.Claim; namespace MFAadapter { class MyAdapter : IAuthenticationAdapter { public IAuthenticationAdapterMetadata Metadata { //get { return new <instance of IAuthenticationAdapterMetadata derived class>; } } public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext) { //return new instance of IAdapterPresentationForm derived class } public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext) { return true; //its all available for now } public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData) { //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter } public void OnAuthenticationPipelineUnload() { } public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex) { //return new instance of IAdapterPresentationForm derived class } public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims) { //return new instance of IAdapterPresentationForm derived class } } }
Nous ne sommes pas encore prêts à construire... il y a encore deux autres interfaces à utiliser.
Ajoutez deux classes supplémentaires à votre projet : l’une est pour les métadonnées et l’autre pour le formulaire de présentation. Vous pouvez les ajouter dans le même fichier que la classe ci-dessus.
class MyMetadata : IAuthenticationAdapterMetadata { } class MyPresentationForm : IAdapterPresentationForm { }
Ensuite, vous pouvez ajouter les membres requis pour chacun d’eux. Tout d’abord, les métadonnées (avec des commentaires inline utiles)
class MyMetadata : IAuthenticationAdapterMetadata { //Returns the name of the provider that will be shown in the AD FS management UI (not visible to end users) public string AdminName { get { return "My Example MFA Adapter"; } } //Returns an array of strings containing URIs indicating the set of authentication methods implemented by the adapter /// AD FS requires that, if authentication is successful, the method actually employed will be returned by the /// final call to TryEndAuthentication(). If no authentication method is returned, or the method returned is not /// one of the methods listed in this property, the authentication attempt will fail. public virtual string[] AuthenticationMethods { get { return new[] { "http://example.com/myauthenticationmethod1", "http://example.com/myauthenticationmethod2" }; } } /// Returns an array indicating which languages are supported by the provider. AD FS uses this information /// to determine the best language\locale to display to the user. public int[] AvailableLcids { get { return new[] { new CultureInfo("en-us").LCID, new CultureInfo("fr").LCID}; } } /// Returns a Dictionary containing the set of localized friendly names of the provider, indexed by lcid. /// These Friendly Names are displayed in the "choice page" offered to the user when there is more than /// one secondary authentication provider available. public Dictionary<int, string> FriendlyNames { get { Dictionary<int, string> _friendlyNames = new Dictionary<int, string>(); _friendlyNames.Add(new CultureInfo("en-us").LCID, "Friendly name of My Example MFA Adapter for end users (en)"); _friendlyNames.Add(new CultureInfo("fr").LCID, "Friendly name translated to fr locale"); return _friendlyNames; } } /// Returns a Dictionary containing the set of localized descriptions (hover over help) of the provider, indexed by lcid. /// These descriptions are displayed in the "choice page" offered to the user when there is more than one /// secondary authentication provider available. public Dictionary<int, string> Descriptions { get { Dictionary<int, string> _descriptions = new Dictionary<int, string>(); _descriptions.Add(new CultureInfo("en-us").LCID, "Description of My Example MFA Adapter for end users (en)"); _descriptions.Add(new CultureInfo("fr").LCID, "Description translated to fr locale"); return _descriptions; } } /// Returns an array indicating the type of claim that the adapter uses to identify the user being authenticated. /// Note that although the property is an array, only the first element is currently used. /// MUST BE ONE OF THE FOLLOWING /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname" /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid" public string[] IdentityClaims { get { return new[] { "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" }; } } //All external providers must return a value of "true" for this property. public bool RequiresIdentity { get { return true; } } }
Vous devriez pouvoir maintenant faire F12 (clic droit – Accéder à la définition) sur IAuthenticationAdapter pour voir l’ensemble des membres de l’interface requis.
Ensuite, vous pouvez effectuer une implémentation de celles-ci.
Remplacez l’intégralité du contenu de votre classe par les éléments suivants :
namespace MFAadapter { class MyAdapter : IAuthenticationAdapter { public IAuthenticationAdapterMetadata Metadata { //get { return new <instance of IAuthenticationAdapterMetadata derived class>; } } public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext) { //return new instance of IAdapterPresentationForm derived class } public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext) { return true; //its all available for now } public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData) { //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter } public void OnAuthenticationPipelineUnload() { } public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex) { //return new instance of IAdapterPresentationForm derived class } public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims) { //return new instance of IAdapterPresentationForm derived class } } }
Ensuite, le formulaire de présentation :
class MyPresentationForm : IAdapterPresentationForm { /// Returns the HTML Form fragment that contains the adapter user interface. This data will be included in the web page that is presented /// to the cient. public string GetFormHtml(int lcid) { string htmlTemplate = Resources.FormPageHtml; //todo we will implement this return htmlTemplate; } /// Return any external resources, ie references to libraries etc., that should be included in /// the HEAD section of the presentation form html. public string GetFormPreRenderHtml(int lcid) { return null; } //returns the title string for the web page which presents the HTML form content to the end user public string GetPageTitle(int lcid) { return "MFA Adapter"; } }
Notez le « todo » pour l’élément Resources.FormPageHtml ci-dessus. Vous pouvez le corriger en une minute, mais nous allons d’abord ajouter les instructions de retour requises finales, en fonction des types nouvellement implémentés, à votre classe MyAdapter initiale. Pour ce faire, ajoutez ce qui suit à votre implémentation IAuthenticationAdapter existante :
class MyAdapter : IAuthenticationAdapter { public IAuthenticationAdapterMetadata Metadata { //get { return new <instance of IAuthenticationAdapterMetadata derived class>; } get { return new MyMetadata(); } } public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext) { //return new instance of IAdapterPresentationForm derived class return new MyPresentationForm(); } public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext) { return true; //its all available for now } public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData) { //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter } public void OnAuthenticationPipelineUnload() { } public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex) { //return new instance of IAdapterPresentationForm derived class return new MyPresentationForm(); } public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims) { //return new instance of IAdapterPresentationForm derived class outgoingClaims = new Claim[0]; return new MyPresentationForm(); } }
Maintenant, pour le fichier de ressources contenant le fragment html. Créez un fichier texte dans votre dossier de projet avec le contenu suivant :
<div id="loginArea"> <form method="post" id="loginForm" > <!-- These inputs are required by the presentation framework. Do not modify or remove --> <input id="authMethod" type="hidden" name="AuthMethod" value="%AuthMethod%" /> <input id="context" type="hidden" name="Context" value="%Context%" /> <!-- End inputs are required by the presentation framework. --> <p id="pageIntroductionText">This content is provided by the MFA sample adapter. Challenge inputs should be presented below.</p> <label for="challengeQuestionInput" class="block">Question text</label> <input id="challengeQuestionInput" name="ChallengeQuestionAnswer" type="text" value="" class="text" placeholder="Answer placeholder" /> <div id="submissionArea" class="submitMargin"> <input id="submitButton" type="submit" name="Submit" value="Submit" onclick="return AuthPage.submitAnswer()"/> </div> </form> <div id="intro" class="groupMargin"> <p id="supportEmail">Support information</p> </div> <script type="text/javascript" language="JavaScript"> //<![CDATA[ function AuthPage() { } AuthPage.submitAnswer = function () { return true; }; //]]> </script> </div>
Ensuite, sélectionnez Project-Add>Component... Fichier de ressources et nom du fichier Ressources, puis cliquez sur Ajouter :
Ensuite, dans le fichier Resources.resx , choisissez Ajouter une ressource... Ajoutez un fichier existant. Accédez au fichier texte (contenant le fragment html) que vous avez enregistré ci-dessus.
Vérifiez que votre code GetFormHtml résout correctement le nom de la nouvelle ressource par le préfixe de nom du fichier de ressources (fichier .resx), suivi du nom de la ressource elle-même :
public string GetFormHtml(int lcid) { string htmlTemplate = Resources.MfaFormHtml; //Resxfilename.resourcename return htmlTemplate; }
Vous devez maintenant être en mesure de générer.
Générer l’adaptateur
L’adaptateur doit être intégré à un assembly .NET fortement nommé qui peut être installé dans le GAC dans Windows. Pour ce faire dans un projet Visual Studio, procédez comme suit :
Cliquez avec le bouton droit sur le nom de votre projet dans l’Explorateur de solutions, puis cliquez sur Propriétés.
Sous l’onglet Signature , cochez Signer l’assembly et choisissez <Nouveau...> sous Choisir un fichier de clé de nom fort : entrez un nom de fichier de clé et un mot de passe, puis cliquez sur OK. Vérifiez ensuite que la case Signer l’assembly est cochée et que la case Différer la signature uniquement est décochée. La page des propriétés Signature doit ressembler à ceci :
Ensuite, générez la solution.
Déployer l’adaptateur sur votre ordinateur de test AD FS
Pour qu’un fournisseur externe puisse être appelé par AD FS, il doit être inscrit dans le système. Les fournisseurs d’adaptateurs doivent fournir un programme d’installation qui effectue les actions d’installation nécessaires, notamment l’installation dans le GAC, et le programme d’installation doit prendre en charge l’inscription dans AD FS. Si ce n’est pas fait, l’administrateur doit exécuter les étapes Windows PowerShell ci-dessous. Ces étapes peuvent être utilisées dans le laboratoire pour activer les tests et le débogage.
Préparer la machine AD FS de test
Copiez des fichiers et ajoutez-les au GAC.
Vérifiez que vous disposez d’un ordinateur ou d’une machine virtuelle Windows Server 2012 R2.
Installez le service de rôle AD FS et configurez une batterie de serveurs avec au moins un nœud.
Pour obtenir des instructions détaillées sur la configuration d’un serveur de fédération dans un environnement lab, consultez le Guide de déploiement de Windows Server 2012 R2 AD FS.
Copiez les outils Gacutil.exe sur le serveur.
Gacutil.exe se trouve dans %homedrive%Program Fichiers (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Tools sur un ordinateur Windows 8. Vous aurez besoin du fichier gacutil.exe lui-même, du fichier 1033, du fichier en-US, et de l’autre dossier de ressources localisées sous l’emplacement des outils NETFX 4.0.
Copiez le ou les fichiers de votre fournisseur (un ou plusieurs fichiers de nom fort signés .dll) vers le même emplacement de dossier que gacutil.exe (l’emplacement est juste pour des raisons pratiques)
Ajoutez votre ou vos fichiers .dll au GAC sur chaque serveur de fédération AD FS de la batterie de serveurs :
Exemple : utilisation de l’outil en ligne de commande GACutil.exe pour ajouter une dll au GAC :
C:>.gacutil.exe /if .<yourdllname>.dll
Pour afficher l’entrée résultante dans le GAC :
C:>.gacutil.exe /l <yourassemblyname>
Inscrire votre fournisseur dans AD FS
Une fois les conditions préalables ci-dessus remplies, ouvrez une fenêtre de commande Windows PowerShell sur votre serveur de fédération et entrez les commandes suivantes (notez que si vous utilisez la batterie de serveurs de fédération qui utilise la base de données interne Windows, vous devez exécuter ces commandes sur le serveur de fédération principal de la batterie de serveurs) :
Register-AdfsAuthenticationProvider –TypeName YourTypeName –Name “AnyNameYouWish” [–ConfigurationFilePath (optional)]
Où YourTypeName est votre nom de type fort .NET : « YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL »
Cela inscrit votre fournisseur externe dans AD FS, avec le nom que vous avez fourni en tant que AnyNameYouWish ci-dessus.
Redémarrez le service AD FS (en utilisant le module Services Windows, par exemple).
Exécutez la commande suivante :
Get-AdfsAuthenticationProvider
.Cela montre votre fournisseur comme l'un des fournisseurs du système.
Exemple:
$typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL” Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter” net stop adfssrv net start adfssrv
Si le service d’inscription d’appareil est activé dans votre environnement AD FS, exécutez également la commande PowerShell suivante :
net start drs
Pour vérifier le fournisseur inscrit, utilisez la commande PowerShell suivante :
Get-AdfsAuthenticationProvider
.Cela montre votre fournisseur comme l'un des fournisseurs du système.
Créer la stratégie d’authentification AD FS qui appelle votre adaptateur
Créer la stratégie d’authentification à l’aide du composant logiciel enfichable Gestion AD FS
Ouvrez le composant logiciel enfichable Gestion AD FS (à partir du menu Outils du Gestionnaire de serveur).
Cliquez sur Stratégies d’authentification.
Dans le volet central, sous Multi-Factor Authentication, cliquez sur le lien Modifier à droite des paramètres globaux.
Sous Sélectionner des méthodes d’authentification supplémentaires en bas de la page, cochez la case pour le nom d’administration de votre fournisseur. Cliquez sur Appliquer.
Pour fournir un « déclencheur » pour appeler l’authentification multifacteur à l’aide de votre adaptateur, sous Emplacements , vérifiez à la fois extranet et intranet, par exemple. Cliquez sur OK. (Pour configurer des déclencheurs par partie de confiance, consultez « Créer la stratégie d’authentification à l’aide de Windows PowerShell » ci-dessous.)
Vérifiez les résultats à l’aide des commandes suivantes :
Tout d’abord, utilisez
Get-AdfsGlobalAuthenticationPolicy
. Vous devez voir le nom de votre fournisseur comme l’une des valeurs AdditionalAuthenticationProvider.Ensuite, utilisez
Get-AdfsAdditionalAuthenticationRule
. Vous devez voir les règles pour Extranet et Intranet configurés en conséquence de votre sélection de stratégie dans l’interface utilisateur de l’administrateur.
Créer la stratégie d’authentification à l’aide de Windows PowerShell
Tout d’abord, activez le fournisseur dans la stratégie globale :
Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
Remarque
Notez que la valeur fournie pour le paramètre AdditionalAuthenticationProvider correspond à la valeur que vous avez fournie pour le paramètre « Name » dans l’applet de commande Register-AdfsAuthenticationProvider ci-dessus et à la propriété « Name » de Get-AdfsAuthenticationProvider sortie de l’applet de commande.
Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
Ensuite, configurez des règles globales ou spécifiques aux parties de confiance pour déclencher MFA :
Exemple 1 : pour créer une règle globale qui exige MFA pour les requêtes externes :
Set-AdfsAdditionalAuthenticationRule –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
Exemple 2 : pour créer des règles MFA qui exigent MFA pour les demandes externes adressées à une partie de confiance spécifique. (Remarque : Les fournisseurs individuels ne peuvent pas être connectés à des parties de confiance individuelles dans AD FS dans Windows Server 2012 R2).
$rp = Get-AdfsRelyingPartyTrust –Name <Relying Party Name> Set-AdfsRelyingPartyTrust –TargetRelyingParty $rp –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
S’authentifier via le MFA à l’aide de votre adaptateur
Enfin, effectuez les étapes ci-dessous pour tester votre adaptateur :
Vérifiez que le type d’authentification principal global AD FS est configuré en tant qu’authentification par formulaire pour Extranet et Intranet (cela facilite l’authentification en tant qu’utilisateur spécifique)
Dans le composant logiciel enfichable AD FS, sous Stratégies d’authentification, dans la zone Authentification principale , cliquez sur Modifier en regard des paramètres globaux.
- Vous pouvez également cliquer sur l’onglet Principal à partir de l’interface utilisateur de la stratégie multifacteur .
Vérifiez que l’authentification par formulaire est la seule option activée pour l’extranet et la méthode d’authentification Intranet. Cliquez sur OK.
Ouvrez la page html de connexion lancée par l’IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) et connectez-vous en tant qu’utilisateur AD valide dans votre environnement de test.
Entrez les informations d’identification pour l’authentification principale.
Vous devriez voir la page des formulaires MFA avec des exemples de questions de défi qui s’affichent.
Si vous avez plusieurs adaptateurs configurés, vous verrez la page de choix MFA avec votre nom convivial ci-dessus.
Vous disposez maintenant d’une implémentation opérationnelle de l’interface et vous avez la connaissance du fonctionnement du modèle. Vous pouvez essayer comme exemple supplémentaire de définir des points d’arrêt dans BeginAuthentication et TryEndAuthentication. Notez que BeginAuthentication est exécuté lorsque l’utilisateur entre d’abord dans le formulaire MFA, tandis que TryEndAuthentication est déclenché à chaque envoi du formulaire.
Mettre à jour l’adaptateur pour une authentification réussie
Mais attendez – votre exemple d'adaptateur ne s'authentifiera jamais correctement ! Cela est dû au fait que rien dans votre code ne retourne null pour TryEndAuthentication.
En effectuant les procédures ci-dessus, vous avez créé une implémentation d’adaptateur de base et l’avez ajoutée à un serveur AD FS. Vous pouvez obtenir la page des formulaires MFA, mais vous ne pouvez pas encore vous authentifier, car vous n’avez pas encore placé la logique correcte dans votre implémentation TryEndAuthentication. Nous allons donc ajouter ça.
Rappelez-vous votre implémentation TryEndAuthentication :
public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
//return new instance of IAdapterPresentationForm derived class
outgoingClaims = new Claim[0];
return new MyPresentationForm();
}
Nous allons la mettre à jour afin qu’elle ne retourne pas toujours MyPresentationForm(). Pour cela, vous pouvez créer une méthode utilitaire simple au sein de votre classe :
static bool ValidateProofData(IProofData proofData, IAuthenticationContext authContext)
{
if (proofData == null || proofData.Properties == null || !proofData.Properties.ContainsKey("ChallengeQuestionAnswer"))
{
throw new ExternalAuthenticationException("Error - no answer found", authContext);
}
if ((string)proofData.Properties["ChallengeQuestionAnswer"] == "adfabric")
{
return true;
}
else
{
return false;
}
}
Ensuite, mettez à jour TryEndAuthentication comme suit :
public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
outgoingClaims = new Claim[0];
if (ValidateProofData(proofData, authContext))
{
//authn complete - return authn method
outgoingClaims = new[]
{
// Return the required authentication method claim, indicating the particulate authentication method used.
new Claim( "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "http://example.com/myauthenticationmethod1" )
};
return null;
}
else
{
//authentication not complete - return new instance of IAdapterPresentationForm derived class
return new MyPresentationForm();
}
}
Vous devez maintenant mettre à jour l’adaptateur sur la zone de test. Vous devez d’abord annuler la stratégie AD FS, annuler l’inscription à partir d’AD FS et redémarrer AD FS, puis supprimer l'.dll du GAC, ajouter la nouvelle .dll au GAC, puis l’inscrire dans AD FS, redémarrer AD FS et reconfigurer la stratégie AD FS.
Déployer et configurer l’adaptateur mis à jour sur votre ordinateur AD FS de test
Effacer la stratégie AD FS
Décochez toutes les cases associées à MFA dans l’interface utilisateur de MFA, illustrées ci-dessous, puis cliquez sur OK.
Désinscrire le fournisseur (Windows PowerShell)
PS C:> Unregister-AdfsAuthenticationProvider –Name “YourAuthProviderName”
Exemple :PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”
La valeur que vous passez pour « Name » est la même valeur que « Name » que vous avez fournie à l’applet de commande Register-AdfsAuthenticationProvider. Il s’agit également de la propriété « Name » qui est retournée par Get-AdfsAuthenticationProvider.
Avant de désinscrire un fournisseur, vous devez d'abord le retirer de la stratégie AdfsGlobalAuthenticationPolicy soit en décochant les cases que vous avez cochées dans l'outil de gestion AD FS, soit en utilisant Windows PowerShell.
Le service AD FS doit être redémarré après cette opération.
Supprimer l’assembly de GAC
Tout d’abord, utilisez la commande suivante pour rechercher le nom fort complet de l’entrée :
C:>.gacutil.exe /l <yourAdapterAssemblyName>
Exemple :
C:>.gacutil.exe /l mfaadapter
Utilisez ensuite la commande suivante pour la supprimer du GAC :
.gacutil /u “<output from the above command>”
Exemple :
C:>.gacutil /u “mfaadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
Ajouter l’assembly mis à jour au GAC
Veillez d’abord à coller la .dll mise à jour localement. C:>.gacutil.exe /if .MFAAdapter.dll
Visualiser l’assemblage dans le GAC (ligne de commande)
C:> .gacutil.exe /l mfaadapter
Inscrire votre fournisseur dans AD FS
PS C:>$typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.1, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
PS C:>Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter1”
Redémarrez le service AD FS.
Créer la stratégie d’authentification à l’aide du composant logiciel enfichable Gestion AD FS
Ouvrez le composant logiciel enfichable Gestion AD FS (à partir du menu Outils du Gestionnaire de serveur).
Cliquez sur Stratégies d’authentification.
Sous Multi-Factor Authentication, cliquez sur le lien Modifier à droite des paramètres globaux.
Sous Sélectionner des méthodes d’authentification supplémentaires, cochez la case pour le nom d’administrateur de votre fournisseur. Cliquez sur Appliquer.
Pour fournir un « déclencheur » pour appeler l’authentification multifacteur à l’aide de votre adaptateur, sous Emplacements, vérifiez à la fois extranet et intranet, par exemple. Cliquez sur OK.
S’authentifier via le MFA à l’aide de votre adaptateur
Enfin, effectuez les étapes ci-dessous pour tester votre adaptateur :
Vérifiez que le type d’authentification principal global AD FS est configuré en tant qu’authentification par formulaire pour extranet et intranet (cela facilite l’authentification en tant qu’utilisateur spécifique).
Dans le composant logiciel enfichable de gestion AD FS, sous Stratégies d’authentification, dans la zone Authentification principale, cliquez sur Modifier à côté de Paramètres globaux.
- Vous pouvez également cliquer sur l’onglet Principal à partir de l’interface utilisateur de la stratégie multifacteur.
Vérifiez que l’authentification par formulaire est la seule option activée pour l’extranet et la méthode d’authentification Intranet . Cliquez sur OK.
Ouvrez la page html de connexion lancée par l’IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) et connectez-vous en tant qu’utilisateur AD valide dans votre environnement de test.
Entrez les informations d’identification pour l’authentification principale.
Vous devez voir la page des formulaires MFA avec un exemple de texte de requête s’afficher.
- Si plusieurs adaptateurs sont configurés, la page de choix MFA s’affiche avec votre nom convivial.
Vous devriez voir une connexion réussie lorsque vous entrez adfabric sur la page d’authentification MFA.