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 :

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 :

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 :

L'orchestration peut être vue par :

  1. Accédez à la console d'administration OAM : http(s)://oam-admin-host:oam-adminport/oamconsole.

  2. Accédez à Access Manager, Modules d'authentification.

  3. Ouvrez FederationScheme.

  4. Cliquez sur l'onglet Steps pour afficher les modules d'extension.

  5. 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 :

Module d'extension d'authentification personnalisée

Présentation

Le module d'extension d'authentification personnalisée :

L'exemple comporte :

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 :

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 :

Ces fichiers se trouvent aux emplacements suivants :

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 :

  1. Accédez à la console d'administration OAM : http(s)://oam-admin-host:oam-adminport/oamconsole

  2. Accédez à Access Manager, Plug-ins

  3. Cliquez sur Importer le plug-in.

  4. Sélectionnez le fichier JAR de module d'extension (CustomIdPSelectionPlugin.jar dans 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 :

Description de l'image Activation_Status_Screen.jpg

Vous devez activer le plugin :

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 :

Pour créer un module d'authentification, procédez comme suit :

  1. Accédez à la console d'administration OAM : http(s)://oam-admin-host:oam-adminport/oamconsole

  2. Accédez à Access Manager, Modules d'authentification.

  3. Cliquez sur Créer un module d'authentification.

  4. Sélectionnez Créer un module d'authentification personnalisé.

  5. 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 :

  1. Cliquez sur l'onglet Steps.

  2. Cliquez sur Ajouter pour ajouter l'étape FedAuthnRequestPlugin :

    1. Nom de l'étape : FedAuthnRequestPlugin

    2. Nom de module d'extension : FedAuthnRequestPlugin

  3. Cliquez sur OK.

Description de l'image Authentication_Steps_Screen.jpg

  1. Cliquez sur Ajouter pour ajouter l'étape AssertionProcessing :

    1. Nom de l'étape : AssertionProcessing

    2. Nom de module d'extension : FedUserAuthenticationPlugin

  2. Cliquez sur OK.

Description de l'image Assertion_Processing_Screen.jpg

  1. Cliquez sur Ajouter pour ajouter l'étape IdPSelection :

    1. Nom de l'étape : IdPSelection

    2. Nom de module d'extension : CustomIdPSelectionPlugin

  2. 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 :

  1. Cliquez sur l'onglet Steps Orchestration (Orchestration des étapes).

  2. Sélectionnez IdPSelection comme étape initiale.

  3. Pour FedAuthnRequestPlugin :

    1. Sélectionner une réussite en cas de succès

    2. Sélectionnez AssertionProcessing pour On Failure.

    3. Echec de la sélection pour Sur erreur

  4. Pour AssertionProcessing :

    1. Sélectionner une réussite en cas de succès

    2. Sélectionner un échec en cas d'échec

    3. Echec de la sélection pour Sur erreur

  5. Pour IdPSelection :

    1. Sélectionnez FedAuthnRequestPlugin pour On Success.

    2. Sélectionner un échec en cas d'échec

    3. Echec de la sélection pour Sur erreur

  6. 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 :

  1. Accédez à la console d'administration OAM : http(s)://oam-admin-host:oam-adminport/oamconsole

  2. Accédez à Access Manager, Modèles d'authentification.

  3. Cliquez sur Créer un modèle d'authentification.

  4. Entrez un nom (par exemple, CustomFedScheme) et une description

  5. Définir le niveau d'authentification sur une valeur acceptable (2 dans mon exemple) Sélectionner FORM comme méthode de vérification

  6. Définir l'URL de redirection de question de vérification (dans cet exemple, nous la définissons sur /oam/server/)

  7. Sélectionnez le module d'authentification personnalisé que vous venez de créer (CustomFedModule dans l'exemple).

  8. Définir l'URL de question de vérification (/pages/servererror.jsp dans cet exemple)

  9. Définir le type de contexte (customWar par exemple) Définir la valeur de contexte (/oam ici, car nous n'utilisons aucune page)

  10. Entrez au moins les informations suivantes pour les paramètres de question de vérification : initial_command=NONE is_rsa=true

  11. 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.