Configuration de la connexion unique à l'aide d'MobileFirst®
You can set up single sign-on with MobileFirst® so users can share a session between a HCL and MobileFirst® server.
Avant de commencer
La connexion unique n'est plus prise en charge sur des applications Android avec Worklight 6.2.
Both HCL and MobileFirst® servers must be configured to use the same user registry, LTPA keys, and be set with a specified domain for SSO. Pour plus d'informations, voir Configuration du portail pour l'utilisation d'un registre d'utilisateurs et Gestion de votre registre d'utilisateurs. Si vous utilisez le serveur WebSphere® Application Server, reportez-vous à la documentation de WebSphere® Application Server.
For more information about system support requirements, see System requirements.
Procédure
- Exécutez les tâches configEngine suivantes. Ces tâches configEngine sont disponibles sur le serveur HCL. Si le serveur MobileFirst® se trouve sur WebSphere® Application Server, exécutez les commandes suivantes à partir de la console WebSphere® Integrated Solutions Console. Vous pouvez utiliser les étapes B et C si MobileFirst® se trouve dans la même instance qu'HCL .
- ConfigEngine.bat configure-single-signon -Ddomain=<domain name> -DWasRemoteHostName=<hostname> -DWasSoapPort=<port> -DWasPassword=<password> -Dinteroperable=true -DattributePropagation=true -DrequiresSSL=false
- Facultatif : ConfigEngine.bat export-ltpakeys-single-signon -DkeyFile=c:\ltpa.txt -DkeyPass=<testpass> -DdmgrFlag=false -DWasRemoteHostName=<hostname> -DWasSoapPort=<port> -DWasPassword=<password>
- Facultatif : ConfigEngine.bat import-ltpakeys-single-signon -DkeyFile=c:\ltpa_demo.txt -DkeyPass=<somepassword> -DdmgrFlag=false -DWasRemoteHostName=<hostname> -DWasSoapPort=<port> -DWasPassword=<password>
-
Pour préparer le serveur MobileFirst®, vous devez mettre à jour le fichier WAR MobileFirst® pour permettre aux applications de s'authentifier auprès du registre des utilisateurs. Mettez à jour authenticationConfig.xml au sein de votre projet MobileFirst®. IT est dans MobileFirst Project/server/conf/authenticationConfig.xml. Localisez l'élément
<securityTests>et ajoutez les tests de sécurité mobile et Web. -
Modifiez le fichier WAR du projet MobileFirst® en ajoutant deux nouveaux fichiers HTML au fichier WAR. Le fichier WAR de projet se trouve dans /MobileFirst Project/bin. Copiez ce fichier WAR à un autre emplacement pour l'éditer.
- Modify the MobileFirst® project WAR that was updated in the previous step by editing the web.xml file in the WEB-INF directory.
<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/loginError.html</form-error-page> </form-login-config> </login-config> - Facultatif : Ajoutez une contrainte de sécurité pour protéger la ressource Web en modifiant le fichier web.xml dans le fichier WAR de projet MobileFirst®.
<security-constraint id="SecurityConstraint_1"> <web-resource-collection id="WebResourceCollection_1"> <web-resource-name>mobilefirst</web-resource-name> <description>Protecting mobilefirst application</description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint id="AuthConstraint_1"> <description>MobileFirst applications</description> <role-name>Administrator</role-name> </auth-constraint> <user-data-constraint id="UserDataConstraint_1"> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <security-role id="SecurityRole_1"> <description>Only specific users</description> <role-name>Administrator</role-name> </security-role> - Lorsque le fichier WAR de projet MobileFirst® est mis à jour, déployez-le sur le serveur MobileFirst®.
- Redémarrez le serveur sur lequel MobileFirst® est installé. Si vous avez ajouté la contrainte de sécurité, mappez le groupe ou l'utilisateur sur le fichier EAR.
- Mettez à jour le fichier application-descriptor.xml afin d'ajouter les tests de sécurité que vous avez configurés. Ouvrez le fichier MobileFirst Project/apps/mobilefirst app/application-descriptor.xml dans la vue de conception et mettez-le à jour afin de disposer des domaines et des tâches de sécurité corrects.
- Dans l'application principale, ajoutez un test de sécurité appelé WASLTPARealmTests dans la section Common (optional) section.
- In , add the Security test called mobileTests.
-
Ouvrez MobileFirst Project/apps/mobilefirst app/application-descriptor.xml et ajoutez l'élément
<securityTests>.<securityTests> <mobileSecurityTest name="mobileTests"> <testDeviceId provisioningType="none" /> <testUser realm="WASLTPARealm" /> </mobileSecurityTest> <customSecurityTest name="WASLTPARealmTests"> <test realm="WASLTPARealm" isInternalUserID="true"/> </customSecurityTest> </securityTests> -
Ajoutez l'exemple
<realm>pourWASLTPARealm.<realm loginModule="WASLTPAModule" name="WASLTPARealm"> <className>com.worklight.core.auth.ext.FormBasedAuthenticator</className> </realm> </realms> -
Ajoutez l'exemple
<loginModule>pourWASLTPAModule.<loginModule name="WASLTPAModule"> <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className> </loginModule> -
Après avoir créé le fichier WAR côté serveur, modifiez le côté client pour permettre l'authentification entre les deux serveurs. Dans une application de démonstration de connexion unique, modifiez le code HTML de MobileFirst Project/apps/mobilefirst app/common/index.html pour inclure un formulaire de connexion et du code JavaScript afin de prendre en charge la réponse. Dans une démonstration, index.html inclut le code de l'exemple suivant.
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>index</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> <link rel="shortcut icon" href="images/favicon.png"> <link rel="apple-touch-icon" href="images/apple-touch-icon.png"> <link rel="stylesheet" href="css/main.css"> <script>window.$ = window.jQuery = WLJQ;</script> </head> <body id="content" style="display: none"> <div id="AppBody"> <div class="wrapper"> </div> </div> <div id="AuthBody" style="display: none"> <div id="loginForm"> Username:<br/> <input type="text" id="usernameInputField" autocorrect="off" autocapitalize="off" /><br /> Password:<br/> <input type="password" id="passwordInputField" autocorrect="off" autocapitalize="off"/><br/> <input type="button" id="loginButton" value="Login" /> <input type="button" id="cancelButton" value="Cancel" /> </div> </div> <!--application UI goes here--> Hello Worklight <script src="js/initOptions.js"></script> <script src="js/main.js"></script> <script src="js/messages.js"></script> <script src="js/challengeResponse.js"></script> </body> </html> -
Mettez à jour les options d'initialisation pour MobileFirst® afin de forcer l'application à se connecter au serveur MobileFirst® au démarrage en ajoutant la valeur
connectOnStartupde false vers true dans MobileFirst Project/apps/mobilefirst app/common/js/initOptions.js. -
Add JavaScript to handle the response from the MobileFirst® and HCL Portal servers. Dans cette application de démonstration de connexion unique, créez un fichier appelé challengeResponse.js, dans MobileFirst Project/apps/mobilefirst app/common/js. Ajoutez l'exemple ci-dessous au contenu du fichier. Update the line
<code>location.href= "http://server:port/wps/myportal"</code>to point to your HCL Portal server.
oui/* * Licensed Materials - Property of IBM * 5725-G92 (C) Copyright HCL Technologies Limited 2006, 2012, 2019. All Rights Reserved. * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ var sampleAppRealmChallengeHandler = WL.Client.createChallengeHandler("WASLTPARealm"); var busyIndicator = new WL.BusyIndicator('content', {text: "Loading..."}); sampleAppRealmChallengeHandler.isCustomResponse = function(response) { if (!response || response.responseText === null) { return false; } var indicatorIdx = response.responseText.search('j_security_check'); if (indicatorIdx >= 0){ return true; } return false; }; sampleAppRealmChallengeHandler.handleChallenge = function(response) { busyIndicator.show(); $('#AppBody').hide(); WL.EncryptedCache.open("wpsadmin", true, onReadOpen, onOpenError); }; sampleAppRealmChallengeHandler.submitLoginFormCallback = function(response) { var isLoginFormResponse = sampleAppRealmChallengeHandler.isCustomResponse(response); if (isLoginFormResponse){ sampleAppRealmChallengeHandler.handleChallenge(response); } else { $('#AppBody').show(); $('#AuthBody').hide(); sampleAppRealmChallengeHandler.submitSuccess(); setTimeout(function(){ busyIndicator.hide(); location.href= "http://server:port/wps/myportal"; }, 1000); } }; $('#loginButton').bind('click', function () { busyIndicator.show(); WL.EncryptedCache.write("username", $('#usernameInputField').val(), onWriteSuccess, onWriteFailure); function onWriteSuccess(status){ WL.EncryptedCache.write("password", $('#passwordInputField').val(), onWriteSuccess2, onWriteFailure); function onWriteSuccess2(status2){ WL.EncryptedCache.close(onCloseCompleteHandler, onCloseFailureHandler); } } function onWriteFailure(status){ alert("Encrypted cache closed, writing failed"); } }); function onCloseCompleteHandler(status){ var reqURL = '/j_security_check'; var options = {}; options.parameters = { j_username : $('#usernameInputField').val(), j_password : $('#passwordInputField').val() }; options.headers = {}; sampleAppRealmChallengeHandler.submitLoginForm(reqURL, options, sampleAppRealmChallengeHandler.submitLoginFormCallback); } function onCloseFailureHandler(status){ alert("close faiure"); } $('#cancelButton').bind('click', function () { sampleAppRealmChallengeHandler.submitFailure(); $('#AppBody').show(); $('#AuthBody').hide(); }); function onReadOpen(status){ WL.EncryptedCache.read("username", onDecryptReadSuccess, onDecryptReadFailure); function onDecryptReadSuccess(value){ WL.EncryptedCache.read("password", onDecryptReadSuccess2, onDecryptReadFailure); function onDecryptReadSuccess2(value2){ if (value && value2){ // submit 1 & 2 var reqURL = '/j_security_check'; var options = {}; options.parameters = { j_username : value, j_password : value2 }; options.headers = {}; sampleAppRealmChallengeHandler.submitLoginForm(reqURL, options, sampleAppRealmChallengeHandler.submitLoginFormCallback); } else { // Didn't find any cached info, ask for login. busyIndicator.hide(); $('#AuthBody').show(); $('#passwordInputField').val(''); } } } function onDecryptReadFailure(status){ alert("Encrypted cache closed, reading failed"); } } function onOpenError(status){ switch(status){ case WL.EncryptedCache.ERROR_KEY_CREATION_IN_PROGRESS: alert("ERROR: KEY CREATION IN PROGRESS"); break; case WL.EncryptedCache.ERROR_LOCAL_STORAGE_NOT_SUPPORTED: alert("ERROR: LOCAL STORAGE NOT SUPPORTED"); break; case WL.EncryptedCache.ERROR_NO_EOC: alert("ERROR: NO EOC"); break; case WL.EncryptedCache.ERROR_COULD_NOT_GENERATE_KEY: alert("ERROR: COULD NOT GENERATE KEY"); break; case WL.EncryptedCache.ERROR_CREDENTIALS_MISMATCH: alert("ERROR: CREDENTIALS MISMATCH"); break; default: alert("AN ERROR HAS OCCURED. STATUS :: " + status); } } - Build your MobileFirst® application for your MobileFirst® server by right-clicking the MobileFirst® application and selecting .
- Sélectionnez Générer l'application pour utiliser un autre serveur MobileFirst.
- Add the information for your MobileFirst® server to the Server and Context path fields.
- Générez votre application en cliquant avec le bouton droit de la souris sur l'application MobileFirst® et en sélectionnant .
- Installez l' application MobileFirst® sur votre serveur MobileFirst®. Ouvrez la console MobileFirst® sur http://server:port/worklight/console et téléchargez l'application MobileFirst® en l'ajoutant à la zone Déployer l'application ou l'adaptateur. Votre fichier d'application MobileFirst® se trouve dans votre espace de travail Eclipse dans le dossier bin. The MobileFirst® application file has the .wlapp extension.