Module d'authentification personnalisé dans OAM et SP
Cet article crée un module d'authentification personnalisé dans OAM/SP, composé de modules d'extension d'authentification de fédération OAM existants et d'un module d'extension personnalisé qui :
-
Evalue la ressource protégée demandée
-
Détermine le paramètre IdP à utiliser dans l'opération SSO de fédération
-
Demande une méthode d'authentification Federation supérieure à partir de IdP, en fonction de la ressource demandée
Pour plus d'informations sur la conception d'un module d'extension d'authentification personnalisé, reportez-vous au Guide du développeur OAM, qui explique comment développer un tel module.
Concentrez-vous sur les méthodes suivantes :
-
Implémenter le module d'extension
-
le compiler
-
Packagez-le
-
Télécharger le module d'extension vers OAM
-
Créer un module d'authentification
Module d'authentification de fédération
Le module d'authentification de fédération OOTB, appelé FederationPlugin, est composé de deux modules d'extension :
-
FedAuthnRequestPlugin: démarre le flux SSO de fédération, détermine le IdP à utiliser s'il n'est pas fourni par un module d'extension d'authentification précédent, crée une demande SSO et redirige l'utilisateur vers IdP -
AssertionProcessing: traite une réponse SSO SAML/OpenID entrante et met en correspondance le message avec un enregistrement d'utilisateur local dans l'annuaire LDAP.
L'orchestration peut être vue par :
-
Accédez à la console d'administration OAM :
http(s)://oam-admin-host:oam-adminport/oamconsole. -
Accédez à Access Manager, Modules d'authentification.
-
Ouvrez
FederationScheme. -
Cliquez sur l'onglet Steps pour afficher les modules d'extension.
-
Cliquez sur l'onglet Etapes orchestration pour voir l'orchestration entre les différents modules d'extension et le module d'extension utilisé pour démarrer l'opération.

Description de l'image Steps_Orchestration_Screen.jpg
Module d'extension FedAuthnRequestPlugin
FedAuthnRequestPlugin peut utiliser les informations d'un module d'extension d'authentification personnalisé précédent qui ont une incidence sur le mode de déclenchement de l'opération SSO de fédération.
L'instance AuthenticationContext partagée entre les modules d'extension d'authentification contient des objets CredentialParam qui permettent aux différents modules d'extension de communiquer lors de l'exécution.
oracle.security.am.plugin.authn.AuthenticationContext : contexte de l'opération d'authentification partagée entre les différents modules d'extension d'authentification
oracle.security.am.plugin.authn.Credential : collecte des données d'informations d'identification stockées dans AuthenticationContext
oracle.security.am.plugin.authn.CredentialParam : un seul paramètre d'informations d'identification référencé par un nom et de type (chaîne la plupart du temps) a une valeur, selon le type Stocké dans l'instance d'informations d'identification
A l'aide de ce mécanisme, FedAuthnRequestPlugin peut utiliser différents types d'informations lors du démarrage d'une opération SSO de fédération, stockées dans l'instance d'informations d'identification :
-
IdP pour effectuer l'authentification unique de fédération avec une référence facultative par la chaîne
KEY_FEDIDP-
Type: chaîne -
Value: IdP Nom du partenaire
-
-
Méthode d'authentification de fédération à demander à partir de IdP (facultatif) référencée par
KEY_FEDAUTHNMETHOD-
stringType : chaîne -
Value: méthode d'authentification de fédération qui doit être définie dans la demande SSO
-
-
Attribut de comparaison de méthode d'authentification de fédération SAML 2.0 facultatif référencé par la chaîne
KEY_FEDAUTHNMETHODCOMP-
Type: chaîne -
Value: comparaison à utiliser dans SAML
-
-
2.0 Message de demande d'Authn exact pour le meilleur pour le meilleur min pour le minimum max pour le maximum La force
AuthnWag Facultatif Référencé par la chaîneKEY_FEDFORCEAUTHN-
Type: chaîne -
Value: chaîne "true" ou "false" pour indiquer si OAM/SP doit demander à l'utilisateur IdP de répondre à la question de vérification, même si l'utilisateur est déjà authentifié auprès de IdP
-
-
Valeur Is Passive Wag Facultatif référencée par la chaîne
KEY_FEDISPASSIVE-
Type: chaîne -
Value: chaîne "true" ou "false" pour indiquer si IdP est autorisé à interagir avec l'utilisateur
-
Module d'extension d'authentification personnalisée
Présentation
Le module d'extension d'authentification personnalisée :
-
Evalue la ressource demandée
-
Détermine la valeur IdP à utiliser
-
Demande une méthode d'authentification de fédération forte à partir de IdP lorsqu'une ressource sensible est demandée, si IdP prend en charge une méthode d'authentification de fédération plus forte
L'exemple comporte :
-
Trois partenaires IdP :
-
AcmeIdP, qui prend en charge les méthodes d'authentification de fédération suivantes
-
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport(par défaut, aucune demande spécifique n'est nécessaire) -
urn:oasis:names:tc:SAML:2.0:ac:classes:X509 -
WorldBank
-
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport(par défaut, pas besoin de demander spécifiquement)urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI -
WInsuranceIdP -
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport(par défaut, aucune demande spécifique n'est nécessaire) -
Trois ressources de haut niveau :
-
http://company.com/businesspartners/acmebank, lié àAcmeIdP -
http://company.com/businesspartners/worldbank, lié à WorldBank -
http://company.com/businesspartners/worldinsurance, lié àWInsuranceIdP
-
-
Trois ressources sensibles, pour les trois ressources de haut niveau :
-
http://company.com/businesspartners/acmebank/account -
http://company.com/businesspartners/worldban/account -
http://company.com/businesspartners/worldinsurance/account
-
-
Le module d'extension d'authentification personnalisé est constitué des éléments suivants :
-
Une classe Java étendant la classe
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn -
Fichier
MANIFEST.MFdécrivant les classes Java -
Un fichier XML décrivant le module d'extension
-
Ces trois éléments sont regroupés dans un fichier JAR qui est ensuite téléchargé vers le serveur OAM via la console d'administration OAM. Une fois téléchargé et activé, créez un module d'authentification de fédération.
Classe Java
La classe implémentant mon module d'extension d'authentification personnalisé doit respecter les règles suivantes :
-
Etendre la classe
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn -
Mettez en oeuvre les méthodes suivantes :
-
ExecutionStatuspublic-
process(contexte
AuthenticationContext) génèreAuthenticationException -
Doit renvoyer un statut (échec ou réussite)
-
Dans notre exemple, cette méthode évalue la ressource demandée
-
Définissez
KEY_FEDIDPCredentialParampour indiquer la valeur IdP à utiliser. -
Définissez
KEY_FEDAUTHNMETHODCredentialParampour demander une méthode d'authentification de fédération spécifique à partir de IdP
-
-
chaîne publique
getPluginName()- Renvoie le nom du module d'extension personnalisé
-
Dans notre exemple, il renvoie
CustomIdPSelectionPlugin. -
chaîne publique
getDescription()-
Renvoie une description du module d'extension d'authentification personnalisé
-
Dans notre exemple, il renvoie "Custom IdP Selection Plugin"
-
-
Map <String, MonitoringData> getMonitoringData()public-
Non utilisé dans un flux de module d'extension d'authentification
-
Dans notre exemple, il renvoie la valeur NULL.
-
-
public boolean
getMonitoringStatus()-
Non utilisé dans un flux de module d'extension d'authentification
-
Dans notre exemple, il renvoie la valeur False
-
-
public int
getRevision()-
Doit avoir la même valeur que la version spécifiée dans le fichier manifeste
-
Dans notre exemple, il renvoie 10.
-
-
public void
setMonitoringStatus(boolean status)-
Non utilisé dans un flux de module d'extension d'authentification
-
Dans notre exemple, cette méthode est vide
-
-
Le code suivant est un exemple de plug-in personnalisé.
package userauthn;
import java.util.Map;
import oracle.security.am.plugin.ExecutionStatus; import oracle.security.am.plugin.MonitoringData;
import oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn; import oracle.security.am.plugin.authn.AuthenticationContext; import oracle.security.am.plugin.authn.AuthenticationException; import oracle.security.am.plugin.authn.CredentialParam;
public class CustomIdPSelectionPlugin extends
AbstractAuthenticationPlugIn
{
public ExecutionStatus process(AuthenticationContext context)
throws AuthenticationException {
// requested URL
String resourceURL = context.getResourceURL();
// determines the IdP based on the request resource
String idpPartnerName = null;
if (resourceURL.startsWith("http://company.com/businesspartners/acmebank"))
idpPartnerName = "AcmeIdP";
else if (resourceURL.startsWith("http://company.com/businesspartners/worldbank"))
idpPartnerName = "WorldBank";
else if (resourceURL.startsWith("http://company.com/businesspartners/worldinsurance"))
idpPartnerName = "WInsuranceIdP";
// if IdP was determined, create a Credential param
// instance in the AuthenticationContext
// the OAM/SP FedAuthnRequestPlugin will consume it
to start Federation SSO if (idpPartnerName != null) {
CredentialParam idpParam = new
CredentialParam();
idpParam.setName("KEY_FEDIDP");
idpParam.setType("string");
idpParam.setValue(idpPartnerName);
context.getCredential().addCredentialParam("KEY_FEDIDP", idpParam);
}
// here, the plugin evaluates if the account subpath is being requested
// if it is, it requests from IdP higher Fed Auth
Method
String fedAuthnMethod = null;
if ("AcmeIdP".equals(idpPartnerName) &&
resourceURL.startsWith("http://company.com/businesspartners/acmebank/account")) { // AcmeIdP supports X.509 as the higher
authentication method
fedAuthnMethod =
"urn:oasis:names:tc:SAML:2.0:ac:classes:X509";
} else if ("WorldBank".equals(idpPartnerName) &&
resourceURL.startsWith("http://company.com/businesspartners/worldbank/account")) // WorldBank supports smart card as the higher
authentication method
fedAuthnMethod =
"urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI";
} else if ("WInsuranceIdP".equals(idpPartnerName)
&&
resourceURL.startsWith("http://company.com/businesspartners/worldinsurance/account"))
{
// WInsuranceIdP does not support another fed
authn method
}
// if another fed authn method was requested, create a Credential param
// instance in the AuthenticationContext
// the OAM/SP FedAuthnRequestPlugin consumes it to start Federation SSO if (fedAuthnMethod != null) {
CredentialParam fedAuthnParam = new
CredentialParam();
fedAuthnParam.setName("KEY_FEDAUTHNMETHOD")
fedAuthnParam.setType("string");
fedAuthnParam.setValue(fedAuthnMethod);
context.getCredential().addCredentialParam("KEY_FEDAUTHNMETHOD fedAuthnParam);
}
// return success, which is mapped to
FedAuthnRequestPlugin in the
// Authentication Module steps orchestration
return ExecutionStatus.SUCCESS;
}
public String getPluginName() {
return "CustomIdPSelectionPlugin";
}
public String getDescription() {
return "Custom IdP Selection Plugin";
}
public Map<String, MonitoringData> getMonitoringData() {
return null;
}
public boolean getMonitoringStatus() {
return false;
}
public int getRevision() {
return 10;
}
public void setMonitoringStatus(boolean arg0) {
} }
Fichier d'inscription de plug-in
Le module d'extension d'authentification personnalisé doit être défini dans un fichier XML de module d'extension tel que :
<Plugin type="Authentication">
<author>uid=admin</author>
<email>admin@example</email>
<creationDate>08:00:00,2014-01-15</creationDate>
<description>Custom IdP Selection
Plugin</description>
<confguration>
</confguration>
Remarque importante : le fichier XML doit porter le même nom que la classe implémentant le module d'extension, dans ce cas CustomIdPSelectionPlugin.xml
Pour plus d'informations, reportez-vous au guide du développeur OAM.
Fichier manifeste
Avant de packager le module d'extension d'authentification personnalisé dans un flux JAR, un élément MANIFEST.MF doit être défini comme suit :
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: CustomIdPSelectionPlugin
Bundle-SymbolicName: CustomIdPSelectionPlugin
Bundle-Version: 10
Bundle-Activator: userauthn.CustomIdPSelectionPlugin Import-Package:
org.osgi.framework;version="1.3.0",oracle.security.am. plugin,oracle.security.am.plugin.authn Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Pour plus d'informations, reportez-vous au guide du développeur OAM.
Remarque : le fichier manifeste doit inclure la propriété ImportPackage qui répertorie tous les packages utilisés dans le module d'extension.
Création du module d'extension
Compilation
Les fichiers JAR suivants du déploiement OAM doivent être utilisés pour la compilation :
-
felix.jar
-
oam-plugin.jar
Ces fichiers se trouvent aux emplacements suivants :
-
felix.jar:$IAM_HOME/oam/server/lib/plug/felix.jar -
oam-plugin.jar:$IAM_HOME/oam/serve /lib/plugin/oam-plugin.jar
Dans cet exemple, le fichier CustomIdPSelectionPlugin.java est placé dans un dossier src/userautn :
bash-4.1$ ls -l src/userauthn/total 4
-rw-r--r-- 1 root root 3894 Mar 1 11:42 CustomIdPSelectionPlugin.java
Pour compiler, exécutez la commande suivante :
$JDK_HOME/bin/javac -cp $IAM_HOME/oam/serve/lib/plugin/felix.jar:$IAM_HOME/oam/server/lib/plu /oam-plugin.jar src/userauthn/*.java
Packaging du module d'extension personnalisé
Nous avons créé MANIFEST.MF dans le répertoire en cours en fonction du contenu répertorié dans la section précédente et CustomIdPSelectionPlugin.xml dans le répertoire src, qui contient la définition de module d'extension répertoriée dans la section précédente.
find
.
./MANIFEST.MF
./src
./src/userauthn
./src/userauthn/CustomIdPSelectionPlugin.class
./src/userauthn/CustomIdPSelectionPlugin.java ./src/CustomIdPSelectionPlugin.xm
Pour créer le fichier JAR CustomIdPSelectionPlugin.jar qui contient le module d'extension et les fichiers requis, exécutez la commande suivante :
jar cfvm CustomIdPSelectionPlugin.jar MANIFEST.MF -C src/ .
added manifest
adding: userauthn/(in = 0) (out= 0)(stored 0%) adding: userauthn/CustomIdPSelectionPlugin.class(in =2717) (out= 1267)(deflated 53%)
adding: userauthn/CustomIdPSelectionPlugin.java(in =3894) (out= 1055)(deflated 72%)
adding: CustomIdPSelectionPlugin.xml(in = 234) (out= 155)(deflated 33%)
Cette opération crée CustomIdPSelectionPlugin.jar. Pour visualiser le contenu du fichier :
unzip -l CustomIdPSelectionPlugin.jar Archive: CustomIdPSelectionPlugin.jar
| Longueur | Date | Heure | Nom |
|---|---|---|---|
| 0 | 03-01-2014 | 10:14 | MÉTA-INF/ |
| (425) | 03-01-2014 | 10:14 | MÉTA-INF/MANIFEST.MF |
| 0 | 03-01-2014 | 10 h 13 | utilisateurauthn/ |
| (2717) | 03-01-2014 | 10 h 13 | utilisateurauthn/CustomIdPSelectionPlugin.class |
| (3894) | 03-01-2014 | 09:56 | utilisateurauthn/CustomIdPSelectionPlugin.java |
| (234) | 03-01-2014 | 10:03 | CustomIdPSelectionPlugin.xml |
| (7270) | 6 fles |
Remarque importante : le fichier JAR doit porter le même nom que la classe implémentant le module d'extension, dans ce cas CustomIdPSelectionPlugin.jar
Déploiement du module d'extension d'authentification personnalisée
Pour déployer le module d'extension d'authentification personnalisé dans OAM, procédez comme suit :
-
Accédez à la console d'administration OAM :
http(s)://oam-admin-host:oam-adminport/oamconsole -
Accédez à Access Manager, Plug-ins
-
Cliquez sur Importer le plug-in.
-
Sélectionnez le fichier JAR de module d'extension (
CustomIdPSelectionPlugin.jardans cet exemple).

Description de l'illustration Import_Plug-In_Screen.jpg
Le module d'extension sera à l'état téléchargé :

Description de l'illustration Plug-In_State_Screen.jpg
Vous devez distribuer le module d'extension aux serveurs OAM d'exécution et l'activer :
-
Sélectionner le module d'extension
-
Cliquez sur Distribuer les éléments sélectionnés.
-
L'onglet Statut d'activation du module d'extension affiche l'état du module d'extension.

Description de l'image Activation_Status_Screen.jpg
Vous devez activer le plugin :
-
Sélectionner le module d'extension
-
Cliquez sur Activer la sélection.
-
L'onglet Statut d'activation du module d'extension affiche l'état du module d'extension

Description de l'image Activate_Plugin_Screen.jpg
Créer le module d'authentification
Créez un module d'authentification de fédération basé sur le module d'authentification FederationPlugin existant, qui diffère du module existant :
-
CustomIdPSelectionPluginsera l'étape initiale de l'orchestration : En cas de succès sera mis en correspondance avecFedAuthnRequestPlugin -
En cas d'échec mappé avec l'échec
-
En cas d'erreur mappée avec l'échec
Pour créer un module d'authentification, procédez comme suit :
-
Accédez à la console d'administration OAM :
http(s)://oam-admin-host:oam-adminport/oamconsole -
Accédez à Access Manager, Modules d'authentification.
-
Cliquez sur Créer un module d'authentification.
-
Sélectionnez Créer un module d'authentification personnalisé.
-
Entrez un nom (
CustomFedModule, par exemple)

Description de l'image Authentication_Module_Screen.jpg
Pour ajouter des étapes au nouveau module d'authentification, procédez comme suit :
-
Cliquez sur l'onglet
Steps. -
Cliquez sur Ajouter pour ajouter l'étape
FedAuthnRequestPlugin:-
Nom de l'étape :
FedAuthnRequestPlugin -
Nom de module d'extension :
FedAuthnRequestPlugin
-
-
Cliquez sur OK.

Description de l'image Authentication_Steps_Screen.jpg
-
Cliquez sur Ajouter pour ajouter l'étape
AssertionProcessing:-
Nom de l'étape :
AssertionProcessing -
Nom de module d'extension :
FedUserAuthenticationPlugin
-
-
Cliquez sur OK.

Description de l'image Assertion_Processing_Screen.jpg
-
Cliquez sur Ajouter pour ajouter l'étape
IdPSelection:-
Nom de l'étape :
IdPSelection -
Nom de module d'extension :
CustomIdPSelectionPlugin
-
-
Cliquez sur OK.

Description de l'image IdP_Selection_Screen.jpg
L'onglet Etapes affiche :

Description de l'image Steps_Screen.jpg
Pour définir l'orchestration des étapes pour le nouveau module d'authentification, procédez comme suit :
-
Cliquez sur l'onglet Steps Orchestration (Orchestration des étapes).
-
Sélectionnez
IdPSelectioncomme étape initiale. -
Pour
FedAuthnRequestPlugin:-
Sélectionner une réussite en cas de succès
-
Sélectionnez
AssertionProcessingpour On Failure. -
Echec de la sélection pour Sur erreur
-
-
Pour
AssertionProcessing:-
Sélectionner une réussite en cas de succès
-
Sélectionner un échec en cas d'échec
-
Echec de la sélection pour Sur erreur
-
-
Pour
IdPSelection:-
Sélectionnez
FedAuthnRequestPluginpour On Success. -
Sélectionner un échec en cas d'échec
-
Echec de la sélection pour Sur erreur
-
-
Cliquez sur Appliquer.

Description de l'image Define_steps_orchestration_Screen.jpg
Modèle d'authentification
Avant de pouvoir protéger les ressources avec une stratégie d'authentification qui utilise ce nouveau module d'authentification, un nouveau modèle d'authentification doit être créé, référençant ce nouveau module personnalisé. Cette opération est obligatoire, car la stratégie d'authentification est liée à un modèle d'authentification et non à un module d'authentification.
Pour créer un nouveau modèle d'authentification pour ce module personnalisé, procédez comme suit :
-
Accédez à la console d'administration OAM :
http(s)://oam-admin-host:oam-adminport/oamconsole -
Accédez à Access Manager, Modèles d'authentification.
-
Cliquez sur Créer un modèle d'authentification.
-
Entrez un nom (par exemple,
CustomFedScheme) et une description -
Définir le niveau d'authentification sur une valeur acceptable (2 dans mon exemple) Sélectionner FORM comme méthode de vérification
-
Définir l'URL de redirection de question de vérification (dans cet exemple, nous la définissons sur
/oam/server/) -
Sélectionnez le module d'authentification personnalisé que vous venez de créer (
CustomFedModuledans l'exemple). -
Définir l'URL de question de vérification (
/pages/servererror.jspdans cet exemple) -
Définir le type de contexte (
customWarpar exemple) Définir la valeur de contexte (/oamici, car nous n'utilisons aucune page) -
Entrez au moins les informations suivantes pour les paramètres de question de vérification :
initial_command=NONE is_rsa=true -
Cliquez sur Appliquer

Description de l'image Authentication_Scheme_Screen.jpg
Tester
Protéger une ressource avec une stratégie d'authentification à l'aide du modèle d'authentification nouvellement créé. Le module d'authentification personnalisé est appelé.
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuite sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation du produit, visitez le site Oracle Help Center.
Custom Authentication Module in OAM and SP
F60229-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.