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 :
- Installez Liberty.
- Créez deux serveurs.
- Téléchargez et installez une application de test fournie par IBM®
et qui inclut le servlet de surveillance (Snoop).
- 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.
- Connectez-vous.
- Editez les configuration de fournisseur et de partie utilisatrice OpenID Connect
pour utiliser votre nom d'hôte réel.
- 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
- Installez WebSphere Liberty.
- Téléchargez le fichier WebSphere Liberty
.zip depuis WASdev
dans un nouveau répertoire pour votre installation.
- 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.
- 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.
- 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
- Créez les serveurs Liberty.
- Créez le serveur de partie utilisatrice OpenID Connect.
Exécutez la commande suivante depuis le répertoire wlp/bin :
server create Liberty_RP
- Créez le serveur de fournisseur OpenID Connect.
Exécutez la commande suivante depuis le répertoire wlp/bin :
server create Liberty_OP
- Créez le fichier server.xml pour le serveur de la partie utilisatrice OpenID Connect.
- Accédez au répertoire wlp/usr/servers/Liberty_RP.
- 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>
- Créez le fichier server.xml pour le serveur du fournisseur OpenID Connect.
- Accédez au répertoire wlp/usr/servers/Liberty_OP.
- 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>
- 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
- Ajoutez le certificat de signataire pour le serveur Liberty_OP au serveur Liberty_RP en tant que certificat digne de confiance.
- Exportez le certificat personnel depuis le magasin de clés du serveur Liberty_OP.
- Accédez au répertoire wlp/usr/servers/Liberty_OP/resources/security.
- 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.
- Importez le certificat de signataire depuis le serveur Liberty_OP dans le magasin de clés du serveur Liberty_RP.
- Copiez le fichier libertyOP.cer dans le répertoire wlp/usr/servers/Liberty_RP/resources/security.
- Accédez au répertoire wlp/usr/servers/Liberty_RP/resources/security.
- Exécutez la commande suivante pour effectuer l'importation :
keytool -importcert -keystore key.jks -storepass Password -alias libertyop -file libertyOP.cer -noprompt
- Facultatif : Affichez le magasin de clés du serveur Liberty_RP :
keytool -list -v -keystore key.jks -storepass Password
- 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.
- 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
- Ouvrez la page de connexion du serveur Liberty_RP.
- Dans la barre d'adresse de votre navigateur, entrez l'URL du serveur Liberty_RP :
http://localhost:9081/snoop
- 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.
- Connectez-vous au serveur Liberty_OP et autorisez le serveur Liberty_RP.
- Authentifiez l'utilisateur sur le serveur Liberty_OP.
- Connectez-vous avec Jackson comme nom d'utilisateur et Password comme mot de passe.
- 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.
- 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.
- Indiquez les noms qualifiés complets de vos serveurs.
- Remplacez le nom de système hôte local dans le fichier server.xml
du serveur Liberty_RP par son nom qualifié complet.
- Editez le fichier wlp/usr/servers/Liberty_RP/server.xml.
- Ajoutez l'attribut suivant à l'élément httpEndpoint : host="*".
- 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>
- 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.
- Remplacez le nom de système hôte local dans le fichier server.xml
du serveur Liberty_OP par son nom qualifié complet.
- Editez le fichier wlp/usr/servers/Liberty_OP/server.xml.
- Ajoutez l'attribut suivant à l'élément httpEndpoint : host="*".
- 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" />
- 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.
- Ouvrez la page de connexion en utilisant le nom d'hôte qualifié complet.
- Dans la barre d'adresse d'un navigateur, entrez l'URL incluant le serveur Liberty_RP :
http://<host_name>:9081/snoop
- 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.
- Connectez-vous au serveur Liberty_OP et autorisez le serveur Liberty_RP.
- Authentifiez l'utilisateur sur le serveur Liberty_OP.
- Connectez-vous avec Jackson comme nom d'utilisateur et Password comme mot de passe.
- 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.
- 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ésultatsQuestion |
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. |