Módulo Posterior a la Autenticación Personalizado en OAM y SP
En este artículo se muestra cómo implementar un plugin de autenticación personalizado que se llamará después de que se haya completado SSO de federación y que:
- Acceder a la información incluida en la afirmación de SAML (nombre IdP, atributos de usuario...)
- Actualizar los atributos de usuario de LDAP según los atributos de usuario de SAML
Para obtener más información sobre cómo diseñar un plugin de autenticación personalizado, consulte OAM Developer's Guide, capítulo 3, que describe cómo desarrollar dicho módulo: http://docs.oracle.com/cd/E40329_01/dev.1112/e27134/authnapi.htm
. Centrémonos en cómo:
- Implantar el plugin
- Compilarlo
- Paquete
- Cargar el plugin en OAM
- Crear un nuevo módulo de autenticación de federación
Módulo de Autenticación de Federación
Nota importante: Al utilizar la aplicación de SP de prueba de federación, el módulo de autenticación se omite y, como tal, los plugins definidos en dicho módulo no se ejecutarán.
Un módulo de autenticación de OAM es:
- Recopilación de plugins de autenticación
- Orquestación que determina el orden de ejecución de los plugins
El módulo de autenticación de federación de OOTB, denominado FederationPlugin, está formado por dos plugins:
- FedAuthnRequestPlugin: inicia el flujo de SSO de federación, determina qué IdP utilizar si no lo proporciona un plugin de autenticación anterior, crea una solicitud de SSO y redirige al usuario a IdP
- AssertionProcessing: procesa una respuesta de inicio de sesión único de SAML/OpenID entrante y asigna el mensaje a un registro de usuario local en el directorio LDAP
La orquestación la pueden ver:
- Vaya a la consola de administración de OAM:
http(s)://oam-adminhost:oam-admin-port/oamconsole
. - Vaya a Access Manager, Authentication Modules.
- Abra FederationScheme.
- Haga clic en el separador Pasos para ver los plugins.
- Haga clic en el separador Orquestación de pasos para ver la orquestación entre los distintos plugins y el plugin que se utiliza para iniciar la operación.
Descripción de la ilustración Federation_Plugin_Screen.png
Plugin AssertionProcessing
El plugin AssertionProcessing
es responsable de la validación y el consumo de una afirmación de SSO entrante, de la asignación de la afirmación a un registro de usuario de LDAP local y devuelve la identidad del usuario, así como el contenido de la afirmación a OAM. La instancia AuthenticationContext
compartida entre los plugins de autenticación contiene objetos CredentialParam
que permiten que los distintos plugins se comuniquen en tiempo de ejecución, así como el resultado de la operación de autenticación.
oracle.security.am.plugin.authn.AuthenticationContext
: contexto para la operación de autenticación compartida entre los distintos plugins de autenticaciónoracle.security.am.plugin.authn.Credential
: recopilación de datos de credenciales almacenados en AuthenticationContextoracle.security.am.plugin.authn.CredentialParam
: parámetro de credencial única al que hace referencia un nombre y que tiene un tipo (cadena la mayor parte del tiempo) según el tipo almacenado en la instancia de credencial
Datos de contexto de autenticación
Tras una autenticación correcta, un plugin de autenticación de OAM devuelve los siguientes datos en AuthenticationContext
:
- Asunto JaaS que identifica al usuario, con las siguientes instancias de principal:
oracle.security.am.common.utilities.principal.OAMUserPrincipal
cuyo nombre contieneuserID
oracle.security.am.common.utilities.principal.OAMUserDNPrincipal
cuyo nombre contiene el DN del usuariooracle.security.am.common.utilities.principal.OAMGUIDPrincipal
si está presente, cuyo nombre contiene el GUID del usuario
Las siguientes instancias CredentialParam
incluidas en el objeto Credential de AuthenticationContext
- DN del usuario al que hace referencia la cadena KEY_USERNAME_DN
- Tipo: cadena
- Valor: DN del usuario
Las siguientes instancias PluginResponse
incluidas en AuthenticationContext
:
- La cadena
KEY_AUTHENTICATED_USER_NAME
hace referencia a userID - Tipo: PluginAttributeContextType.LITERAL
- Valor: userID
Nombre del almacén de identidades en el que se encuentra el registro de usuario
- Con referencia de la cadena
KEY_IDENTITY_STORE_REF
- Tipo: PluginAttributeContextType.LITERAL
- Valor: nombre del almacén de ID de OAM
Nivel de autenticación si se sustituyó durante el procesamiento del SP de federación (consulte este artículo para obtener más información: Artículo 27 Asignación del método de autenticación de Fed a los niveles de autenticación en el SP de OAM)
- Con referencia de la cadena KEY_AUTHN_LEVEL
- Tipo: PluginAttributeContextType.LITERAL
- Valor: nivel de autenticación como cadena
Datos de afirmación, cada elemento es una instancia PluginResponse
autónoma:
- Referenciado por su nombre (ver abajo)
- Tipo: PluginAttributeContextType.SESSION
- Valor: objeto de cadena
OAM utiliza los datos incluidos en AuthenticationContext para el procesamiento posterior.
Los datos de afirmación están formados por los siguientes elementos:
- IdP nombre del partner, al que hace referencia
fed.partner
- Formato NameID de SAML, al que hace referencia
fed.nameidformat
- Valor NameID, al que hace referencia
fed.nameidvalue
- Atributos de usuario incluidos en la afirmación, a los que hace referencia
fed.aLr.ATTRIBUTE_NAME
, conATTRIBUTE_NAME
- El nombre del atributo incluido en la afirmación, si no hay ningún perfil de atributo IdP asignado al nombre a un nombre de atributo de sesión de OAM local
- O el nombre del nombre de atributo de sesión de OAM, que es el resultado de la asignación del nombre del atributo en la afirmación a un nombre de atributo de sesión de OAM local basado en el perfil de atributo IdP utilizado para el partner IdP.
Ejemplo
Tomemos el siguiente ejemplo para examinar los datos que devuelve el plugin AssertionProcessing
al final del flujo:
- OAM actúa como SP
- El partner IdP es un SAML 2.0 IdP registrado como
acmeIdP
en el servidor OAM/SP y el ProviderID/Issuer del IDP eshttp://acme.com/idp
- IdP envía una afirmación de SAML 2.0 que contiene
- NameID de formato
urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress
, siendo el valor la dirección de correo electrónico del usuario - Tres atributos de SAML
- Nombre definido en uid que contiene
userID
- Nombre definido en apellido que contiene el apellido del usuario
- Nombre definido en el nombre que contiene el nombre del usuario
El partner IdP de OAM/SP está enlazado a un perfil de atributo IdP con solo una entrada, que asigna el UID de nombre de atributo de SAML al ID de usuario de nombre de atributo de sesión de OAM. En el ejemplo, el usuario de prueba estará activo:
- UserID en OAM/SP alice
- Atributos enviados en la afirmación de SAML:
- userID: alice
- apellido: Appleton
- firstname: Alice
- La dirección de correo electrónico para alice es
alice@oracle.com
Un ejemplo de la afirmación de SAML 2.0 es:
<samlp:Response ..>
<saml:Issuer ...>hLp://acme.com/idp</saml:Issuer>
<samlp:Status>
<samlp:StatusCode
Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion ...>
<saml:Issuer ...>hLp://acme.com/idp</saml:Issuer>
<dsig:Signature ...>
...
</dsig:Signature>
<saml:Subject>
<saml:NameID ...>alice@oracle.com</saml:NameID>
...
</saml:Subject> <saml:Conditions ...>
...
</saml:Conditions> <saml:AuthnStatement ...>
...
</saml:AuthnStatement>
<saml:AttributeStatement ...>
<saml:Attribute Name="userid" ...>
<saml:AttributeValue ...>alice</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="lastname" ...>
<saml:AttributeValue ...>Appleton</saml:AttributeValue> </saml:Attribute>
<saml:Attribute Name="firstname" ...>
<saml:AttributeValue ...>Alice</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>
Después de procesar correctamente la afirmación de SAML 2.0 y la asignación de la respuesta de SSO entrante a un registro de usuario local, el plugin AssertionProcessing
devuelve a OAM AuthenticationContext
con los siguientes datos: Asunto que contiene:
oracle.security.am.common.utilities.principal.OAMUserPrincipal
con el nombre definido en alice (userID local de alice)oracle.security.am.common.utilities.principal.OAMUserDNPrincipal
con el nombre definido en cn=alice,ou=users,dc=us,dc=oracle,dc=com (DN local de alias)oracle.security.am.common.utilities.principal.OAMGUIDPrincipal
con el nombre definido en el GUID local de alice
Las siguientes instancias CredentialParam
incluidas en el objeto Credential de AuthenticationContext
KEY_USERNAME_DN
con el valor definido encn=alice
,ou=users
,dc=us
,dc=oracle
,dc=com
(DN local de alias)
Las siguientes instancias PluginResponse
incluidas en AuthenticationContext
:
KEY_AUTHENTICATED_USER_NAME
con el valor de cadena definido enalice
(userID local de alias), con el tipo definido en literalKEY_IDENTITY_STORE_REF
con el valor de cadena definido enIDStore
(nombre del almacén de ID de OAM local), con el tipo definido en literalfed.partner
con el valor de cadena definido enacmeIdP
(nombre de partner IdP local), con el tipo definido en la sesiónfed.nameidformat
con el valor de cadena definido enurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
, con el tipo definido en la sesiónfed.nameidvalue
con el valor de cadena definido en alice@oracle.com , con el tipo definido en la sesiónfed.attr.uid
con el valor de cadena definido en alice, con el tipo definido en la sesión (el nombre del atributo se ha asignado de userid a uid debido al perfil de atributo IdP)fed.attr.lastname
con el valor de cadena establecido en Appleton, con el tipo establecido en sessionfed.attr.firstname
con el valor de cadena definido en Alice, con el tipo definido en session
Plugin de autenticación personalizada
Visión general
En este artículo, supongamos que el despliegue de OAM/SP debe soportar:
- Creación/aprovisionamiento de cuentas de usuario cuando se redirige al usuario a OAM/SP pero no tiene una cuenta local: la cuenta recién creada se rellena con los datos de afirmación de SAML 2.0
- Actualizaciones automáticas de la cuenta de usuario para que los atributos de usuario LDAP se refresquen con los últimos datos de afirmación de SAML 2.0.
Uso de un módulo de aprovisionamiento de usuarios justo a tiempo que proporciona soporte para #1. Para poder cumplir los requisitos de #2, se necesita un plugin de autenticación personalizado que:
- Se llama después de un procesamiento correcto del plugin
AssertionProcessing
- Examen de los datos extraídos de la afirmación de SAML 2.0
- Conéctese a LDAP y, finalmente, actualice los atributos de usuario de LDAP.
En este ejemplo, el entorno está formado por:
-
OAM como SP de SAML 2.0
-
El partner IdP es un SAML 2.0 IdP registrado como acmeIdP en el servidor OAM/SP y el ProviderID/Issuer del IDP es http://acme.com/idp
-
IdP envía una afirmación de SAML 2.0 que contiene
-
NameID
de formatourn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress
, siendo el valor la dirección de correo electrónico del usuario -
Tres atributos de SAML
-
Nombre definido en uid que contiene userID
-
Nombre definido en apellido que contiene el apellido del usuario
-
Nombre definido en el nombre que contiene el nombre del usuario
-
El partner IdP de OAM/SP está enlazado a un perfil de atributo IdP con solo una entrada, que asigna el UID de nombre de atributo de SAML al ID de usuario de nombre de atributo de sesión de OAM
El plugin de autenticación personalizado está formado por lo siguiente:
- Una clase Java que amplía la clase
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn
- Un archivo
MANIFEST.MF
que describe las clases Java - Un archivo XML que describe el plugin
Estos tres elementos se incluyen en un archivo JAR que, a continuación, se carga en el servidor de OAM mediante la consola de administración de OAM. Una vez cargado y activado, modifique el módulo de autenticación de federación.
Clase Java
La clase que implementa el plugin de autenticación personalizado debe cumplir lo siguiente:
-
Amplíe la clase
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn
-
Implante los siguientes métodos:
-
El proceso
public ExecutionStatus
(contexto AuthenticationContext) devuelveAuthenticationException
-
Debe devolver un estado (fallo o éxito)
-
En este ejemplo, este método recupera los datos de afirmación y el DN de usuario Connect to LDAP y actualiza los atributos de registro de usuario según los datos de afirmación
-
public String getPluginName()
devuelve el nombre del plugin personalizado. En nuestro ejemplo, devuelveCustomAttributesUpdatePlugin
-
public String getDescription()
devuelve una descripción del plugin de autenticación personalizado. En nuestro ejemplo, devuelveCustom Attributes Update Plugin
-
public Map<String, MonitoringData> getMonitoringData()
No se utiliza en un flujo de plugin de autenticación y, en nuestro ejemplo, devuelve un valor nulo -
public boolean getMonitoringStatus()
No se utiliza en un flujo de plugin de autenticación. En nuestro ejemplo, devuelve false -
public int getRevision()
debe ser el mismo valor que la versión especificada en el archivo de manifiesto. En nuestro ejemplo, devuelve 10 -
public void setMonitoringStatus(boolean status)
No se utiliza en un flujo de plugin de autenticación. En nuestro ejemplo, este método estará vacío
El siguiente código es un ejemplo del plugin personalizado.
package postsp;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.security.auth.Subject;
import oracle.security.am.common.utilities.principal.OAMUserDNPrincipal;
import oracle.security.am.common.utilities.principal.OAMUserPrincipal;
import oracle.security.am.plugin.ExecutionStatus;
import oracle.security.am.plugin.MonitoringData;
import oracle.security.am.plugin.PluginAttributeContextType;
import oracle.security.am.plugin.PluginResponse;
import oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn;
import oracle.security.am.plugin.authn.AuthenticationContext;
import oracle.security.am.plugin.authn.AuthenticationException;
public class CustomAttributesUpdatePlugin extends
AbstractAuthenticationPlugIn
{
public ExecutionStatus process(AuthenticationContext context)
throws AuthenticationException {
// user's ID and DN. Note: we are not making necessary checks for size/null to
// keep the sample code minimal.
Subject subject = context.getSubject();
Set<OAMUserPrincipal> principalsUserID =
subject.getPrincipals(OAMUserPrincipal.class);
Set<OAMUserDNPrincipal> principalsDN =
subject.getPrincipals(OAMUserDNPrincipal.class);
String localUserID =
(String)principalsUserID.iterator().next().getName();
String localUserDN = (String)principalsDN.iterator().next().getName();
// get the assertion data. Note: We are not making necessary checks for size/null to
// keep the sample code minimal.
PluginResponse partnerResponse = context.getResponse( PluginAttributeContextType.SESSION, "fed.partner");
String partnerName = (String)partnerResponse.getValue(); PluginResponse nameIDResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.nameidvalue");
String nameID = (String)nameIDResponse.getValue();
PluginResponse uidResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.uid");
String uid = (String)uidResponse.getValue();
PluginResponse firstnameResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.firstname");
String firstname = (String)firstnameResponse.getValue(); PluginResponse lastnameResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.lastname");
String lastname = (String)lastnameResponse.getValue();
try {
// open ldap connection
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://host:port");
env.put(Context.SECURITY_PRINCIPAL, "admin");
env.put(Context.SECURITY_CREDENTIALS, "password"); DirContext ldapContext = new InitialDirContext(env);
// modify user ldap record. Note: We are not making the necessary checks to
// keep the sample code minimal.
Attributes attributes = new BasicAttributes();
attributes.put(new BasicAttribute("givenname", firstname));
attributes.put(new BasicAttribute("sn", lastname));
attributes.put(new BasicAttribute("mail", nameID));
attributes.put(new BasicAttribute("uid", uid));
ldapContext.modifyAttributes(localUserDN,
DirContext.REPLACE_ATTRIBUTE, attributes);
}
catch (NamingException ex) {
throw new AuthenticationException(ex);
}
// return success, so that OAM can resume the flow
return ExecutionStatus.SUCCESS;
}
public String getPluginName() {
return "CustomAttributesUpdatePlugin";
}
public String getDescription() {
return "Custom Attributes Update Plugin";
}
public Map<String, MonitoringData> getMonitoringData() {
return null;
}
public boolean getMonitoringStatus() {
return false;
}
public int getRevision() {
return 10;
}
public void setMonitoringStatus(boolean arg0) {
} }
Archivo de registro de plugin
El plugin de autenticación personalizado se debe definir en un archivo XML de plugin como:
<Plugin type="Authentication">
<author>uid=admin</author>
<email>admin@example</email>
<creationDate>08:00:00,2014-01-15</creationDate>
<description>Custom Attributes Update Plugin</description>
<conhguration>
</conhguration>
</Plugin>
Nota importante: el archivo XML debe tener el mismo nombre que la clase que implementa el plugin, en este caso CustomAttributesUpdatePlugin.xml
Consulte la guía para desarrolladores de OAM para obtener más información.
Archivo de manifiesto
Before packaging the custom Authentication plugin in a JAR file, a MANIFEST.MF must be defined such as: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CustomAttributesUpdatePlugin Bundle-SymbolicName: CustomAttributesUpdatePlugin Bundle-Version: 10 Bundle-Activator: postsp.CustomAttributesUpdatePlugin Import-Package: org.osgi.framework;version=”1.3.0”,oracle.security.am.plugin,oracle.security.am.plugin.authn,oracle.security.am.common.utilities.principal,javax.naming,javax.naming.directory,javax.security.auth Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Consulte la guía para desarrolladores de OAM para obtener más información.
Nota: El archivo de manifiesto debe incluir la propiedad Import-Package, que enumera todos los paquetes que se utilizan en el plugin
Creación del plugin
Compilación
Los siguientes archivos JAR del despliegue de OAM se deben utilizar para la compilación:
- felix.jar (Fin de creación)
- oam-plugin.jar
- utilities.jar (Fin de creación)
Estos archivos se encuentran en las siguientes ubicaciones:
- felix.jar:
$IAM_HOME/oam/server/lib/plugin/felix.jar
- oam-plugin.jar:
$IAM_HOME/oam/server/lib/plugin/oamplugin.jar
- utilities.jar:
$IAM_HOME/oam/server/lib/plugin/utilities.jar
En este ejemplo, colocamos el archivo CustomAttributesUpdatePlugin.java en una carpeta src/postsp:
bash-4.1$ ls -l src/postsp/ total 4
-rw-r--r-- 1 root root 4377 Oct 1 09:54 CustomAttributesUpdatePlugin.java
Para compilar, ejecute el siguiente comando:
$JDK_HOME/bin/javac -cp $IAM_HOME/oam/server/lib/plugin /felix.jar:$IAM_HOME/oam/server/lib/plugin/oam-
plugin.jar:$IAM_HOME/oam/server/lib/plugin/utilities.jar src/postsp /\*.java
Empaquetado del plugin personalizado
Creamos MANIFEST.MF
en el directorio actual según el contenido mostrado en la sección anterior y CustomAttributesUpdatePlugin.xml
en el directorio src, que contiene la definición de plugin mostrada en la sección anterior.
find
.
./MANIFEST.MF
./src
./src/userauthn
./src/userauthn/CustomAttributesUpdatePlugin.class
./src/userauthn/CustomAttributesUpdatePlugin.java
./src/CustomAttributesUpdatePlugin.xml
Para crear el archivo JAR CustomAttributesUpdatePlugin.jar
que contiene el plugin y los archivos necesarios, ejecute el siguiente comando:
jar cfvm CustomAttributesUpdatePlugin.jar MANIFEST.MF -C src/ . added manifest adding: CustomAttributesUpdatePlugin.xml(in = 238) (out= 158)(deflated 33%) adding: postsp/(in = 0) (out= 0)(stored 0%) adding: postsp/CustomAttributesUpdatePlugin.java(in = 4377) (out= 1206)(deflated 72%) adding: postsp/CustomAttributesUpdatePlugin.class(in = 3726) (out= 1667)(deflated 55%)
De esta forma se crea CustomAttributesUpdatePlugin.jar. Para ver el contenido del archivo:
unzip -l CustomAttributesUpdatePlugin.jar Archive: CustomAttributesUpdatePlugin.jar
Longitud | Fecha | Hora | Nombre |
---|---|---|---|
0 | 10-01-2014 | 10:04 | METADATOS/ |
542 | 10-01-2014 | 10:04 | META-INF/MANIFEST.MF |
238 | 10-01-2014 | 09:11 | CustomAttributesUpdatePlugin.xml (Fin de creación) |
0 | 10-01-2014 | 09:59 | postp/ |
4377 | 10-01-2014 | 09:54 | postsp/CustomAttributesUpdatePlugin.java |
3726 | 10-01-2014 | 09:54 | postsp/CustomAttributesUpdatePlugin.class |
8883 | 6 |
Nota importante: el archivo JAR debe tener el mismo nombre que la clase que implementa el plugin, en este caso
CustomAttributesUpdatePlugin.jar
Despliegue del plugin de autenticación personalizado
Realice los siguientes pasos para desplegar el plugin de autenticación personalizado en OAM:
- Vaya a la consola de administración de OAM:
http(s)://oam-adminhost:oam-admin-port/oamconsole
- Vaya a Access Manager, Plugins.
- Haga clic en Importar plugin
- Seleccione el archivo JAR del plugin (
CustomAttributesUpdatePlugin.jar
en este ejemplo)
Descripción de la ilustración Specifying_Plug-in_JAR_file.png
El plugin tendrá un estado cargado:
Descripción de la ilustración Plug-in_loaded_Screen.png
Debe distribuir el plugin a los servidores de OAM en tiempo de ejecución y activarlo:
- Seleccione el plugin
- Haga clic en Distribuir seleccionado El separador Estado de activación del plugin muestra el estado del plugin
Descripción de la ilustración Plug-in_Screen_with_Status.png
Debe activar el plugin:
- Seleccione el plugin
- Haga clic en Activar seleccionado El separador Estado de activación del plugin muestra el estado del plugin
Descripción de la ilustración Plug-in_Screen_with_Status_Activated.png
Creación del módulo de autenticación
Cree un nuevo módulo de autenticación de federación basado en el módulo de autenticación FederationPlugin
existente, que difiera del existente:
-
CustomAttributesUpdatePlugin
es el paso llamado después de un resultado correcto del pluginAssertionProcessing
-
Organización:
-
Si es correcto, se asignará correctamente.
-
Al producirse un fallo, se asignará a un fallo
-
Si se produce un error, se asignará a un fallo
Realice los siguientes pasos para crear un nuevo módulo de autenticación:
- Vaya a la consola de administración de OAM:
http(s)://oam-adminhost: oam-admin-port/oamconsole
- Vaya a Access Manager, Authentication Modules.
- Haga clic en Crear módulo de autenticación.
- Seleccione Create Custom Authentication Module.
- Introduzca un nombre (
CustomFedModule
, por ejemplo)
Descripción de la ilustración Creating_Authentication_Module.png
Realice los siguientes pasos para agregar pasos al nuevo módulo de autenticación:
- Haga clic en el separador Pasos
- Haga clic en Agregar para agregar el paso
FedAuthnRequestPlugin
: - Nombre de nivel:
FedAuthnRequestPlugin
- Nombre del Plugin:
FedAuthnRequestPlugin
- Haga clic Aceptar
- Haga clic en Agregar para agregar el paso
AssertionProcessing
: - Nombre de nivel:
AssertionProcessing
- Nombre del Plugin:
FedUserAuthenticationPlugin
- Haga clic Aceptar
- Haga clic en Agregar para agregar el paso
AttributesUpdate
: - Nombre de nivel:
AttributesUpdate
- Nombre del Plugin:
CustomAttributesUpdatePlugin
- Haga clic Aceptar
Descripción de la ilustración Add_Authentication_Module.png
Descripción de la ilustración Add_Assertion_Processing_Screen.png
Descripción de la ilustración Attributes_Update_Screen.png
El separador Pasos muestra:
Descripción de la ilustración Steps_Screen.png
Realice los siguientes pasos para definir la orquestación de pasos para el nuevo módulo de autenticación:
- Haga clic en el separador Orquestación de pasos Seleccione
FedAuthnRequestPlugin
como paso inicial paraFedAuthnRequestPlugin
: - Selección de ejecución correcta
- Seleccione
AssertionProcessing
para Fallo de selección en caso de error - Para
AssertionProcessing
: - Seleccione
AttributesUpdate
en Éxito - Fallo de selección de fallo de selección de fallo tras error
- Para
AttributesUpdate
: - Selección de ejecución correcta
- Fallo de selección en caso de fallo
- Seleccionar fallo en caso de error
- Haga clic en Aplicar.
Descripción de la ilustración Define_Orchestration_Screen.png
Esquema de Autenticación
Antes de poder proteger recursos con una política de autenticación que utilice el nuevo módulo de autenticación, se debe crear un nuevo esquema de autenticación que haga referencia a ese nuevo módulo personalizado. Esto es necesario, ya que la política de autenticación está enlazada a un esquema de autenticación, no a un módulo de autenticación. Para crear un nuevo esquema de autenticación para ese módulo personalizado, realice los siguientes pasos:
- Vaya a la consola de administración de OAM:
http(s)://oam-adminhost:oam-admin-port/oamconsole
- Vaya a Access Manager, Authentication Schemes.
- Haga clic en Create Authentication Scheme.
- Introduzca un nombre (por ejemplo,
CustomFedScheme
) y una descripción Defina el nivel de autenticación en un valor aceptable (2 en este ejemplo). - Seleccione
FORM
como Método de comprobación - Defina la URL de redirección de desafío (en este ejemplo, la definimos en
/oam/server/
) - Seleccione el módulo de autenticación personalizado recién creado (
CustomFedModule
en el ejemplo). - Defina la URL de desafío (
/pages/servererror.jsp
en este ejemplo). - Defina el tipo de contexto (
customWar
, por ejemplo) - Defina el valor de contexto (
/oam
aquí, ya que no utilizamos ninguna página) - Introduzca al menos lo siguiente para los parámetros de comprobación:
- initial_command = NINGUNO
- is_rsa=verdadero
- Haga clic en Aplicar.
Descripción de la ilustración Authentication_Schemes_Screen.png
Probar
Proteja un recurso con una política de autenticación mediante el esquema de autenticación recién creado. Esto llama al módulo de autenticación personalizado. Antes de la SSO de federación, el registro de usuario LDAP para alice en OAM/SP es:
dn: cn=alice,ou=users,dc=us,dc=oracle,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
givenName: al
title: manager
uid: alice
cn: alice
sn: APPLETON
userPassword:: e1NTSEE1MTJ9TXp0R2d0Si9GT1NzYUxvRXJqZW0rM1Q2eU5QMW9ZZmZ2Y3FkVWpaS1o1OFNGMy95ZDBueUxUbnllRi83SFRtS2JmOTJ0anY4TFd6di9UanliOGw4WFNQV1BxSnF3N mail: alice@oracle.com
Después de la autenticación, IdP envía la siguiente información para el usuario en la afirmación de SAML 2.0:
- Atributos de SAML:
- userID: alicia
- apellido: Appleton
- nombre: Alice
- SAML NameID: alice@oracle.com
Después del inicio de sesión único de federación, CustomAttributesUpdatePlugin
tiene que actualizar el registro LDAP de alice para que sn, attachname, uid y mail se definan en los valores de la afirmación de SAML. El registro de usuario de LDAP para alice después de la operación SSO de federación en OAM/SP ahora es:
dn: cn=alice,ou=users,dc=us,dc=oracle,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
givenName: Alice
title: manager
uid: alice
cn: alice
sn: Appleton
userPassword:: e1NTSEE1MTJ9TXp0R2d0Si9GT1NzYUxvRXJqZW0rM1Q2eU5QMW9ZZmZ2Y3FkVWpaS1o1OFNGMy95ZDBueUxUbnllRi83SFRtS2JmOTJ0anY4TFd6di9UanliOGw4WFNQV1BxSnF3N
mail: alice@oracle.com
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Custom Post-Authentication Module in OAM and SP
F60230-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.