Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se proporcionan instrucciones para implementar un método de autenticación personalizado para AD FS en Windows Server 2012 R2. Para obtener más información, consulte Métodos de autenticación adicionales.
Advertencia
El ejemplo que puede crear aquí es solo para fines educativos. Estas instrucciones son para la implementación más sencilla y mínima posible para exponer los elementos necesarios del modelo. No hay ningún back-end de autenticación, procesamiento de errores ni datos de configuración.
Configuración del equipo de desarrollo
En este tutorial se usa Visual Studio 2012. El proyecto se puede compilar con cualquier entorno de desarrollo que pueda crear una clase .NET para Windows. El proyecto debe tener como destino .NET 4.5 porque los métodos BeginAuthentication y TryEndAuthentication usan el tipo System.Security.Claims.Claim, parte de .NET Framework versión 4.5. Hay una referencia necesaria para el proyecto:
DLL de referencia | Dónde encontrarlo | Se requiere para |
---|---|---|
Microsoft.IdentityServer.Web.dll | El archivo dll se encuentra en %windir%\ADFS en un servidor windows Server 2012 R2 en el que se ha instalado AD FS. Este DLL debe ser copiado en la máquina de desarrollo y se debe crear una referencia explícita en el proyecto. |
Tipos de interfaz, como IAuthenticationContext, IProofData |
Creación del proveedor
En Visual Studio 2012: elija Archivo->Nuevo->Proyecto...
Seleccione Biblioteca de clases y asegúrese de que tiene como destino .NET 4.5.
Realice una copia de Microsoft.IdentityServer.Web.dll de %windir%\ADFS en el servidor windows Server 2012 R2 donde se ha instalado AD FS y péguelo en la carpeta Project del equipo de desarrollo.
En el Explorador de soluciones, haga clic con el botón derecho en Referencias y agregar referencia...
Busque la copia local de Microsoft.IdentityServer.Web.dll y elija Agregar...
Haga clic en Aceptar para confirmar la nueva referencia:
Ahora debe poder resolver todos los tipos necesarios para el proveedor.
Agregue una nueva clase al proyecto (haga clic con el botón derecho en el proyecto, Agregar... Clase...) y asígnele un nombre como MyAdapter, que se muestra a continuación:
En el nuevo archivo MyAdapter.cs, reemplace el código existente por lo siguiente:
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 } } }
Aún no estamos listos para construir... aún quedan dos interfaces por completar.
Agregue dos clases más al proyecto: una es para los metadatos y la otra para el formulario de presentación. Puede agregarlos en el mismo archivo que la clase anterior.
class MyMetadata : IAuthenticationAdapterMetadata { } class MyPresentationForm : IAdapterPresentationForm { }
A continuación, puede agregar los miembros necesarios para cada una. En primer lugar, los metadatos (con comentarios insertados útiles)
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; } } }
Ahora debería poder hacer clic en F12 (haga clic con el botón derecho – Ir a la definición) en IAuthenticationAdapter para ver el conjunto de miembros de interfaz necesarios.
A continuación, puede realizar una implementación de estos.
Reemplace todo el contenido de la clase por lo siguiente:
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 } } }
A continuación, el formulario de presentación:
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"; } }
Observe el elemento "todo" para Resources.FormPageHtml en el código anterior. Puede corregirlo en un momento, pero primero vamos a agregar las sentencias de retorno finales necesarias, basadas en los tipos recién implementados, a la clase inicial MyAdapter. Para ello, agregue lo siguiente a la implementación de IAuthenticationAdapter existente:
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(); } }
Ahora para el archivo de recursos que contiene el fragmento html. Cree un nuevo archivo de texto en la carpeta del proyecto con el siguiente contenido:
<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>
A continuación, seleccione >, asigne un nombre al archivo Recursos y haga clic en Agregar:
A continuación, en el archivo Resources.resx , elija Agregar recurso... Agregue el archivo existente. Vaya al archivo de texto (que contiene el fragmento html) que guardó anteriormente.
Asegúrese de que el código GetFormHtml resuelve el nombre del nuevo recurso correctamente por el prefijo de nombre del archivo resources (archivo.resx) seguido del nombre del propio recurso:
public string GetFormHtml(int lcid) { string htmlTemplate = Resources.MfaFormHtml; //Resxfilename.resourcename return htmlTemplate; }
Ahora ya puede compilarlo.
Compilación del adaptador
El adaptador debe estar integrado en un ensamblado de .NET con nombre seguro que se pueda instalar en la GAC en Windows. Para lograrlo en un proyecto de Visual Studio, complete los pasos siguientes:
Haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones y haga clic en Propiedades.
En la pestaña Firma , active Firmar el ensamblado y elija <Nuevo...> en Elegir un archivo de clave de nombre seguro: escriba un nombre de archivo de clave y una contraseña y haga clic en Aceptar. A continuación, asegúrese de que la casilla Firmar el ensamblado esté activada y la casilla Solo retrasar firma esté desactivada. La página de propiedades Firma debe tener el siguiente aspecto:
A continuación, compile la solución.
Implementación del adaptador en la máquina de prueba de AD FS
Para que AD FS pueda invocar un proveedor externo, debe registrarse en el sistema. Los proveedores de adaptadores deben proporcionar un instalador que realice las acciones de instalación necesarias, incluida la instalación en la GAC, y el instalador debe admitir el registro en AD FS. Si esto no se hace, el administrador debe ejecutar los pasos de Windows PowerShell que se indican a continuación. Estos pasos se pueden usar en el laboratorio para posibilitar las pruebas y la depuración.
Preparar la máquina de prueba de AD FS
Copie archivos y agregue a GAC.
Asegúrese de que tiene un equipo o una máquina virtual windows Server 2012 R2.
Instale el servicio de rol de AD FS y configure una granja de servidores con al menos un nodo.
Para obtener pasos detallados para configurar un servidor de federación en un entorno de laboratorio, consulte la Guía de implementación de AD FS de Windows Server 2012 R2.
Copie la herramienta Gacutil.exe en el servidor.
Gacutil.exe se puede encontrar en %homedrive%Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Tools en una máquina Windows 8. Necesitará el archivo gacutil.exe, el 1033, en-US y la otra carpeta de recursos localizados que se encuentra debajo de la ubicación Herramientas de NETFX 4.0.
Copie los archivos de proveedor (uno o varios archivos de .dll firmados con nombre seguro) en la misma ubicación de carpeta que gacutil.exe (la ubicación es solo para mayor comodidad).
Agregue los archivos .dll a la GAC en cada servidor de federación de AD FS de la granja:
Ejemplo: uso de la herramienta de línea de comandos GACutil.exe para agregar un archivo DLL a la GAC:
C:>.gacutil.exe /if .<yourdllname>.dll
Para ver la entrada resultante en la GAC:
C:>.gacutil.exe /l <yourassemblyname>
Registro del proveedor en AD FS
Una vez cumplidos los requisitos previos anteriores, abra una ventana de comandos de Windows PowerShell en el servidor de federación y escriba los siguientes comandos (tenga en cuenta que si usa la granja de servidores de federación que usa Windows Internal Database, debe ejecutar estos comandos en el servidor de federación principal de la granja):
Register-AdfsAuthenticationProvider –TypeName YourTypeName –Name “AnyNameYouWish” [–ConfigurationFilePath (optional)]
Donde YourTypeName es el nombre del tipo seguro de .NET: "YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL"
Esto registrará su proveedor externo en AD FS, con el nombre que proporcionó como AnyNameYouWish como se indicó anteriormente.
Reinicie el servicio AD FS (con el complemento Servicios de Windows, por ejemplo).
Ejecute el siguiente comando:
Get-AdfsAuthenticationProvider
.Esto muestra el proveedor como uno de los proveedores del sistema.
Ejemplo:
$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 tiene habilitado el servicio de registro de dispositivos en el entorno de AD FS, ejecute también el siguiente comando de PowerShell:
net start drs
Para comprobar el proveedor registrado, use el siguiente comando de PowerShell:
Get-AdfsAuthenticationProvider
Esto muestra el proveedor como uno de los proveedores del sistema.
Creación de la directiva de autenticación de AD FS que invoca al adaptador
Creación de la directiva de autenticación con el complemento Administración de AD FS
Abra el complemento Administración de AD FS (desde el menú Herramientas del Administrador del servidor).
Haga clic en Directivas de autenticación.
En el panel central, en Multi-Factor Authentication, haga clic en el vínculo Editar situado a la derecha de Configuración global.
En Seleccionar métodos de autenticación adicionales al final de la página, seleccione la casilla del nombre de administrador del proveedor. Haga clic en Aplicar.
Para proporcionar un "desencadenador" que invoque a MFA usando el adaptador, en Ubicaciones, seleccione las opciones Extranet e Intranet, por ejemplo. Haga clic en Aceptar. (Para configurar desencadenadores por usuario de confianza, consulte "Crear la directiva de autenticación con Windows PowerShell" a continuación).
Compruebe los resultados mediante los siguientes comandos:
En primer lugar, use
Get-AdfsGlobalAuthenticationPolicy
. Debe aparecer el nombre del proveedor como uno de los valores AdditionalAuthenticationProvider.A continuación, use
Get-AdfsAdditionalAuthenticationRule
. Debería ver las reglas para Extranet e Intranet configuradas como resultado de su elección de política en la interfaz de usuario del administrador.
Creación de la directiva de autenticación mediante Windows PowerShell
En primer lugar, habilite el proveedor en la directiva global:
Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
Nota:
Tenga en cuenta que el valor proporcionado para el parámetro AdditionalAuthenticationProvider corresponde al valor que proporcionó para el parámetro "Name" en el cmdlet de Register-AdfsAuthenticationProvider anterior y a la propiedad "Name" de la salida del cmdlet de Get-AdfsAuthenticationProvider.
Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
A continuación, configure reglas globales o específicas de partes confiables para activar la autentificación multifactor (MFA):
Ejemplo 1: para crear una regla global para requerir MFA para solicitudes externas:
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" );'
Ejemplo 2: Creación de reglas que requieran MFA para solicitudes externas de un usuario de confianza específico. (Nota: Los proveedores individuales no se pueden conectar a partes confiables individuales en AD FS en 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" );'
Autenticación con MFA mediante el adaptador
Por último, realice los pasos siguientes para probar el adaptador:
Asegúrese de que el tipo de autenticación principal global de AD FS está configurado como autenticación de formularios para Extranet e Intranet (esto facilita la autenticación como usuario específico).
En el complemento AD FS, en Directivas de autenticación, en el área Autenticación principal , haga clic en Editar junto a Configuración global.
- O simplemente haga clic en la pestaña Principal de la interfaz de usuario de la directiva multifactor.
Asegúrese de que la autenticación de formularios es la única opción activada para la extranet y el método de autenticación de intranet. Haga clic en Aceptar.
Abra la página html de inicio de sesión iniciado por IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) e inicie sesión como un usuario de AD válido en el entorno de prueba.
Escriba las credenciales para la autenticación principal.
Debe aparecer la página de formularios de MFA con preguntas de desafío de ejemplo.
Si tiene más de un adaptador configurado, verá la página de opciones de MFA con el nombre descriptivo anterior.
Ahora tiene una implementación en funcionamiento de la interfaz y tiene el conocimiento de cómo funciona el modelo. Puede probar como ejemplo adicional para establecer puntos de interrupción en BeginAuthentication y TryEndAuthentication. Observe cómo se ejecuta BeginAuthentication cuando el usuario escribe por primera vez el formulario MFA, mientras que TryEndAuthentication se desencadena en cada envío del formulario.
Actualización del adaptador para la autenticación correcta
Pero espere: el adaptador de ejemplo nunca se autenticará correctamente. Esto se debe a que nada en el código devuelve null para TryEndAuthentication.
Al completar los procedimientos anteriores, creó una implementación básica del adaptador y la agregó a un servidor de AD FS. Puede obtener la página de formularios MFA, pero no puede autenticarse todavía porque no ha puesto la lógica correcta en su implementación TryEndAuthentication. Entonces, vamos a añadir eso.
Recuerde la implementación de 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();
}
Vamos a actualizarlo para que no siempre devuelva MyPresentationForm(). Para ello, puede crear un método de utilidad simple dentro de la clase :
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;
}
}
A continuación, actualice TryEndAuthentication como se indica a continuación:
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();
}
}
Ahora tiene que actualizar el adaptador en el equipo de prueba. Primero debe deshacer la directiva de AD FS, anular el registro de AD FS y reiniciar AD FS, luego quitar la .dll de la GAC y, a continuación, agregar la nueva .dll a la GAC, registrarla en AD FS, reiniciar AD FS y volver a configurar la directiva de AD FS.
Implementación y configuración del adaptador actualizado en la máquina de AD FS de prueba
Eliminación de la directiva de AD FS
Desactive todas las casillas relacionadas con MFA en la interfaz de usuario de MFA, que se muestra a continuación, haga clic en Aceptar.
Anular el registro del proveedor (Windows PowerShell)
PS C:> Unregister-AdfsAuthenticationProvider –Name “YourAuthProviderName”
Ejemplo:PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”
El valor que pasa para "Name" es el mismo valor que proporcionó para "Name" en el cmdlet Register-AdfsAuthenticationProvider. También es la propiedad "Name" que se genera con Get-AdfsAuthenticationProvider.
Antes de anular el registro de un proveedor, debe quitar el proveedor de AdfsGlobalAuthenticationPolicy (ya sea desactivando las casillas que ha activado en el complemento de administración de AD FS o mediante Windows PowerShell).
El servicio AD FS debe reiniciarse después de esta operación.
Eliminación del ensamblado de la GAC
En primer lugar, use el siguiente comando para buscar el nombre seguro completo de la entrada:
C:>.gacutil.exe /l <yourAdapterAssemblyName>
Ejemplo:
C:>.gacutil.exe /l mfaadapter
A continuación, use el siguiente comando para quitarlo de la GAC:
.gacutil /u “<output from the above command>”
Ejemplo:
C:>.gacutil /u “mfaadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
Añade el ensamblado actualizado al GAC
Asegúrese de pegar primero el archivo .dll actualizado en una ubicación local. C:>.gacutil.exe /if .MFAAdapter.dll
Visualización del ensamblado en la GAC (línea de comandos)
C:> .gacutil.exe /l mfaadapter
Registro del proveedor en 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”
Reinicie el servicio AD FS.
Creación de la directiva de autenticación con el complemento Administración de AD FS
Abra el complemento Administración de AD FS (desde el menú Herramientas del Administrador del servidor).
Haga clic en Directivas de autenticación.
En Multi-Factor Authentication, haga clic en el vínculo Editar situado a la derecha de Configuración global.
En Seleccionar métodos de autenticación adicionales, marque la casilla AdminName del proveedor. Haga clic en Aplicar.
Para proporcionar un "desencadenador" para invocar MFA mediante el adaptador, en Ubicaciones, active Extranet e Intranet, por ejemplo. Haga clic en Aceptar.
Autenticación con MFA mediante el adaptador
Por último, realice los pasos siguientes para probar el adaptador:
Asegúrese de que el tipo de autenticación principal global de AD FS está configurado como autenticación de formularios para Extranet e Intranet (esto facilita la autenticación como usuario específico).
En el complemento de administración de AD FS, en Directivas de autenticación, en el área Autenticación principal , haga clic en Editar junto a Configuración global.
- O simplemente haga clic en la pestaña Principal de la interfaz de usuario de la directiva multifactor.
Asegúrese de que la autenticación de formularios es la única opción activada para la extranet y el método de autenticación de intranet . Haga clic en Aceptar.
Abra la página html de inicio de sesión iniciado por IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) e inicie sesión como un usuario de AD válido en el entorno de prueba.
Escriba las credenciales para la autenticación principal.
Debe aparecer la página de formularios de MFA con texto de desafío de ejemplo.
- Si tiene más de un adaptador configurado, verá la página de opciones de MFA con el nombre descriptivo.
Debería ver un inicio de sesión correcto al escribir adfabric en la página de autenticación de MFA.
Véase también
Otros recursos
Métodos de autenticación adicionales
Administración de riesgos con Autenticación multifactor adicional para aplicaciones confidenciales