Mise en route : Configuration d'un fournisseur et d'un client OpenID Connect dans Liberty

Cet exemple de bout en bout vous aidera à vous familiariser avec la configuration d'OpenID Connect (OIDC) dans Liberty car vous suivez le processus depuis l'installation de Liberty jusqu'à la configuration d'OpenID Connect. Les applications client peuvent alors vérifier l'identité d'un utilisateur en se basant sur l'authentification depuis un fournisseur OpenID Connect.

Pourquoi et quand exécuter cette tâche

Vous pouvez configurer un fournisseur OpenID Connect et une partie utilisatrice OpenID Connect en exécutant ces étapes dans la procédure suivante :
  1. Installez Liberty.
  2. Créez deux serveurs.
  3. Téléchargez et installez une application de test fournie par IBM® et qui inclut le servlet de surveillance (Snoop).
  4. Configurez le fournisseur et la partie utilisatrice OpenID Connect pour qu'ils communiquent entre eux en utilisant le nom de système hôte local.
  5. Connectez-vous.
  6. Editez les configuration de fournisseur et de partie utilisatrice OpenID Connect pour utiliser votre nom d'hôte réel.
  7. Connectez-vous.
Les points suivants expliquent ce qui se passe au cours de la procédure :
  • Le serveur de la partie utilisatrice OpenID Connect et le serveur du fournisseur OpenID Connect s'exécutent sur le même système.
  • Les serveurs de la partie utilisatrice et du fournisseur OpenID Connect démarrent avec le nom de système hôte local. Cela permet d'éviter les problèmes que votre système pourrait rencontrer avec un hôte autorisant les connexions externes à lui-même.
  • Un registre à base de fichiers est codé en dur dans le fichier server.xml pour le serveur du fournisseur OpenID Connect. Il comporte deux entrées pour les nom d'utilisateur et mot de passe. L'une est pour le nom d'utilisateur Jackson et le mot de passe Password. L'autre est pour le nom d'utilisateur Andrea et le mot de passe Password. Dans un environnement de production, vous pourriez, par exemple, utiliser un registre d'utilisateurs LDAP car les utilisateurs s'authentifient auprès d'un fournisseur OpenID Connect. Un fournisseur OpenID Connect doit posséder un registre. La partie utilisatrice OpenID Connect n'a pas besoin de registre car elle approuve les artefacts utilisateurs, comme les jetons, qu'elle reçoit du fournisseur OpenID Connect.
  • Les magasins de clés utilisent des mots de passe en texte normal. Vous pouvez générer un mot de passe codé et chiffré en utilisant la commande securityUtility.
  • L'algorithme de signature HS256 est utilisé pour des raisons de simplicité. La prise en charge de l'algorithme de signature HS256 n'est pas obligatoire dans la spécification OpenID Connect. De nombreux fournisseurs OpenID ne prennent pas en charge l'algorithme de signature HS256.
  • Vous placez l'application de test dans le répertoire dropins pour des raisons de commodité, mais évitez cette pratique dans un environnement de production.
  • La trace OIDC est activée afin de vous permettre d'afficher le fichier trace.log du serveur si vous rencontrez des erreurs.

Procédure

  1. Installez WebSphere Liberty.
    1. Téléchargez le fichier WebSphere Liberty .zip depuis WASdev dans un nouveau répertoire pour votre installation.
    2. Extrayez le fichier téléchargé.
      unzip wlp-webProfile7-17.0.0.4.zip

      Les chemins qui suivent dans cet exemple sont relatifs au répertoire que vous avez créé pour votre installation.

  2. Téléchargez l'application exemple par défaut de Liberty.

    Cette application par défaut se trouve dans le fichier libertyDefaultApplication.ear et contient le servlet Snoop que vous allez utiliser dans cet exemple de procédure.

  3. Installez les fonctions de client Liberty OpenID Connect Client et de fournisseur Liberty OpenID Connect Provider.
    Exécutez les commandes suivantes depuis le répertoire wlp/bin :
    installUtility install openidConnectClient-1.0
    installUtility install openidConnectServer-1.0
  4. Créez les serveurs Liberty.
    1. Créez le serveur de partie utilisatrice OpenID Connect.
      Exécutez la commande suivante depuis le répertoire wlp/bin :
      server create Liberty_RP
    2. Créez le serveur de fournisseur OpenID Connect.
      Exécutez la commande suivante depuis le répertoire wlp/bin :
      server create Liberty_OP
  5. Créez le fichier server.xml pour le serveur de la partie utilisatrice OpenID Connect.
    1. Accédez au répertoire wlp/usr/servers/Liberty_RP.
    2. Remplacez le contenu du fichier server.xml par le contenu suivant :
      <server description="Liberty_RP">
          <featureManager>
              <feature>openidConnectClient-1.0</feature>
              <feature>appSecurity-2.0</feature>
          </featureManager>
          <!-- To access this server from anything other than localhost or the loopback address, add a host attribute to the following element, e.g. host="*" -->
          <httpEndpoint httpPort="9081" httpsPort="9444" id="defaultHttpEndpoint"/>
          <keyStore id="defaultKeyStore" password="Password"></keyStore>
          <openidConnectClient id="RP"
              clientId="oidcclient"
              clientSecret="password"
              authorizationEndpointUrl="https://localhost:9443/oidc/endpoint/OP/authorize"
              tokenEndpointUrl="https://localhost:9443/oidc/endpoint/OP/token" >
          </openidConnectClient>
          <logging  traceSpecification="*=info:
      com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.cli.e.nt.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
      </server>
  6. Créez le fichier server.xml pour le serveur du fournisseur OpenID Connect.
    1. Accédez au répertoire wlp/usr/servers/Liberty_OP.
    2. Remplacez le contenu du fichier server.xml par le contenu suivant :
      <server description="Liberty_OP">
          <featureManager>
              <feature>openidConnectServer-1.0</feature>
              <feature>appSecurity-2.0</feature>
          </featureManager>
          <!-- To access this server from anything other than localhost or the loopback address, add a host attribute to the following element, e.g. host="*" -->
          <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
          <keyStore id="defaultKeyStore" password="Password"/>
          <basicRegistry>
              <user name="Jackson" password="Password"/>
              <user name="Andrea" password="Password"/>
          </basicRegistry>
          <openidConnectProvider id="OP" oauthProviderRef="oauth"/>
          <oauthProvider id="oauth">
              <localStore>
                  <!-- The default redirect URL pattern is: https://<hostname>:<sslport>/oidcclient/redirect/<openidConnectClientID> -->
                  <client name="oidcclient"  secret="password" scope="openid" redirect="https://localhost:9444/oidcclient/redirect/RP" />
              </localStore>
          </oauthProvider>
          <!-- To grant all authenticated users access to the OIDC protected resource, grant them the oauth-role authenticated -->
          <oauth-roles>
              <authenticated>
                  <special-subject type="ALL_AUTHENTICATED_USERS"/>
              </authenticated>
          </oauth-roles>
          <logging  traceSpecification="*=info:
      com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.client.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
      </server>
  7. Créez les magasins de clés et les clés par défaut.
    Exécutez les commandes suivantes depuis le répertoire wlp/bin :
    server start Liberty_RP
    server stop Liberty_RP
    server start Liberty_OP
    server stop Liberty_OP
  8. Ajoutez le certificat de signataire pour le serveur Liberty_OP au serveur Liberty_RP en tant que certificat digne de confiance.
    1. Exportez le certificat personnel depuis le magasin de clés du serveur Liberty_OP.
      1. Accédez au répertoire wlp/usr/servers/Liberty_OP/resources/security.
      2. Exportez le certificat personnel par défaut du serveur Liberty_OP :
        keytool -exportcert -keystore key.jks -storepass Password -alias default -file libertyOP.cer
        Le certificat personnel par défaut pour le serveur Liberty_OP est un certificat de signataire.
    2. Importez le certificat de signataire depuis le serveur Liberty_OP dans le magasin de clés du serveur Liberty_RP.
      1. Copiez le fichier libertyOP.cer dans le répertoire wlp/usr/servers/Liberty_RP/resources/security.
      2. Accédez au répertoire wlp/usr/servers/Liberty_RP/resources/security.
      3. Exécutez la commande suivante pour effectuer l'importation :
        keytool -importcert -keystore key.jks -storepass Password -alias libertyop -file libertyOP.cer -noprompt
    3. Facultatif : Affichez le magasin de clés du serveur Liberty_RP :
      keytool -list -v -keystore key.jks -storepass Password
  9. Installez l'application par défaut de Liberty sur le serveur Liberty_RP.

    Copiez le fichier libertyDefaultApplication.ear que vous avez téléchargé précédemment dans le répertoire wlp/usr/servers/Liberty_RP/dropins.

  10. Démarrez le serveur Liberty_OP et le serveur Liberty_RP.
    Exécutez les commandes suivantes depuis le répertoire wlp/bin :
    server start Liberty_RP
    server start Liberty_OP
  11. Ouvrez la page de connexion du serveur Liberty_RP.
    1. Dans la barre d'adresse de votre navigateur, entrez l'URL du serveur Liberty_RP :
      http://localhost:9081/snoop
    2. Appuyez sur la touche Entrée.

      Une fenêtre de connexion s'affiche.

      Important : Si vous voyez un message d'avertissement du navigateur indiquant que la connexion n'est pas sécurisée, effectuez les étapes permettant d'autoriser la connexion.
  12. Connectez-vous au serveur Liberty_OP et autorisez le serveur Liberty_RP.
    1. Authentifiez l'utilisateur sur le serveur Liberty_OP.
      1. Connectez-vous avec Jackson comme nom d'utilisateur et Password comme mot de passe.
      2. Cliquez sur Login (connexion).

        La page Allow client to access the following data (autoriser le client à accéder aux données suivantes) s'affiche avec l'entrée openid cochée.

    2. Autorisez le serveur Liberty_OP à autoriser l'accès du serveur Liberty_RP aux informations personnelles de l'utilisateur.

      Cliquez sur Allow once (autoriser une fois) ou sur Allow, remember my decision (autoriser, se souvenir de ma décision).

      Important : Si vous voyez un message d'avertissement du navigateur indiquant que la connexion n'est pas sécurisée, effectuez les étapes permettant d'autoriser la connexion. Il est possible que cet avertissement s'affiche parce que les magasins de clés utilisés par l'élément httpEndpoint sur les serveurs Liberty_RP et Liberty_OP comportent des certificats autosignés.
    Si la connexion aboutit, le servlet Snoop s'affiche sur la page Snoop Servlet - Request/Client Information (servlet Snoop - informations de demande/client).
    Important : Pour vous connecter à nouveau, exécutez au moins l'une des options suivantes :
    • Connectez-vous depuis un navigateur différent.
    • Supprimez les cookies du navigateur en cours et suivez la procédure précédente pour la connexion.
    • Fermez toutes les fenêtres du navigateur que vous avez utilisé pour vous connecter, rouvrez le navigateur et connectez-vous.
    • Redémarrez le serveur Liberty_RP et suivez la procédure précédente de connexion.
  13. Indiquez les noms qualifiés complets de vos serveurs.
    1. Remplacez le nom de système hôte local dans le fichier server.xml du serveur Liberty_RP par son nom qualifié complet.
      1. Editez le fichier wlp/usr/servers/Liberty_RP/server.xml.
      2. Ajoutez l'attribut suivant à l'élément httpEndpoint : host="*".
      3. Modifiez les attributs authorizationEndpointUrl et tokenEndpointUrl de l'élément openidConnectClient de façon à utiliser le nom d'hôte de votre serveur à la place du nom de système hôte local.

        L'exemple de code suivant spécifie le nom d'hôte serveur qualifié complet :

        <openidConnectClient id="RP"
            clientId="oidcclient"
            clientSecret="password"
            authorizationEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/authorize"
            tokenEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/token" >
        </openidConnectClient>
      4. Sauvegardez le fichier.

        Lorsque vous sauvegardez le fichier, un changement de la configuration Liberty est déclenché pour vous éviter de redémarrer le serveur.

    2. Remplacez le nom de système hôte local dans le fichier server.xml du serveur Liberty_OP par son nom qualifié complet.
      1. Editez le fichier wlp/usr/servers/Liberty_OP/server.xml.
      2. Ajoutez l'attribut suivant à l'élément httpEndpoint : host="*".
      3. Modifiez l'attribut redirect de l'élément client (oauthProvider/localStore/client) afin d'utiliser le nom d'hôte serveur qualifié complet à la place du nom de système hôte local.
        L'exemple de code suivant spécifie le nom d'hôte serveur qualifié complet :
        <client name="oidcclient" secret="password" scope="openid" redirect="https://wks1.acme.com:9444/oidcclient/redirect/RP" />
      4. Sauvegardez le fichier.

        Lorsque vous sauvegardez le fichier, un changement de la configuration Liberty est déclenché pour vous éviter de redémarrer le serveur.

  14. Ouvrez la page de connexion en utilisant le nom d'hôte qualifié complet.
    1. Dans la barre d'adresse d'un navigateur, entrez l'URL incluant le serveur Liberty_RP :
      http://<host_name>:9081/snoop
    2. Appuyez sur la touche Entrée.

      Une fenêtre de connexion s'affiche.

      Important : Si vous voyez un message d'avertissement du navigateur indiquant que la connexion n'est pas sécurisée, effectuez les étapes permettant d'autoriser la connexion.
  15. Connectez-vous au serveur Liberty_OP et autorisez le serveur Liberty_RP.
    1. Authentifiez l'utilisateur sur le serveur Liberty_OP.
      1. Connectez-vous avec Jackson comme nom d'utilisateur et Password comme mot de passe.
      2. Cliquez sur Login (connexion).

        La page Allow client to access the following data (autoriser le client à accéder aux données suivantes) s'affiche avec l'entrée openid cochée.

    2. Autorisez le serveur Liberty_OP à autoriser l'accès du serveur Liberty_RP aux informations personnelles de l'utilisateur.

      Cliquez sur Allow once (autoriser une fois) ou sur Allow, remember my decision (autoriser, se souvenir de ma décision).

      Important : Si vous voyez un message d'avertissement du navigateur indiquant que la connexion n'est pas sécurisée, effectuez les étapes permettant d'autoriser la connexion. Il est possible que cet avertissement s'affiche parce que les magasins de clés utilisés par l'élément httpEndpoint sur les serveurs Liberty_RP et Liberty_OP comportent des certificats autosignés.
    Si la connexion aboutit, le servlet Snoop s'affiche sur la page Snoop Servlet - Request/Client Information (servlet Snoop - informations de demande/client).

Résultats

Vous disposez d'un serveur Liberty comportant le servlet Snoop protégé par une partie utilisatrice OpenID Connect. La partie utilisatrice OpenID Connect utilise votre fournisseur OpenID Connect pour l'authentification.

Tableau 1. Question à propos des résultats
Question Réponse
Comment se fait-il que l'application de test soit protégée par la partie utilisatrice OpenID Connect alors que le serveur Snoop et l'application de test libertyDefaultApplication ne sont pas mentionnés dans la configuration OpenID Connect ? L'application de test est protégée car son fichier web.xml contient une contrainte de sécurité indiquant la prise en charge de tout conteneur activé pour la sécurité Java™ EE. Quand la partie utilisatrice OpenID Connect s'exécute sous Liberty, par défaut la partie utilisatrice tente d'autoriser toutes les demandes vers une URL comportant des contraintes de sécurité. Comme l'application de test possède des contraintes de sécurité sur l'URL utilisée, la partie utilisatrice autorise les demandes.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_config_oidc_pc_examp_beginner.html