Applications Web

Lorsque vous développez une application Web, vous pouvez utiliser le flux Web IBM Cloud® App ID pour authentifier les utilisateurs en toute sécurité. Les utilisateurs peuvent ensuite accéder au contenu protégé côté serveur de vos applications Web.

Comprendre le flux

Les applications Web exigent souvent des utilisateurs qu'ils s'authentifient pour accéder au contenu protégé. App ID utilise le flux de code d'autorisation OIDC pour authentifier les utilisateurs de manière sécurisée. Avec ce flux, l'application reçoit un code d'autorisation lorsqu'un utilisateur est authentifié. Ce code est ensuite échangé contre des jetons d'accès, d'identité et d'actualisation. Dans le code, l'étape d'échange des jetons est toujours envoyée en utilisant un canal sécurisé entre l'application et le serveur de l'OIDC. Ce processus fournit une autre couche de sécurité car le pirate n'est pas en mesure d'intercepter les jetons. Ces jetons peuvent être envoyés directement à l'application d'hébergement du serveur Web pour l'authentification d'utilisateur.

Flux de requêtes de l'application Web
Flux de requêtes de l'application Web

  1. Un utilisateur lance le flux d'autorisation en envoyant une demande au noeud final /authorization via le logiciel SDK ou l'API App ID.

  2. Si l'utilisateur n'est pas autorisé, le flux d'authentification est démarré et redirigé vers App ID.

  3. Selon les paramètres de demande /authorization de l'utilisateur ou la configuration du fournisseur d'identité, il démarre le widget de connexion dans le navigateur de l'utilisateur.

  4. L'utilisateur choisit un fournisseur d'identité pour l'authentification et termine le processus de connexion.

  5. Le fournisseur d'identité redirige vers l'application client avec le code d'autorisation.

  6. Le logiciel SDK App ID échange le code d'autorisation contre des jetons d'accès et d'identité ainsi que des jetons d'actualisation facultatifs à partir du service App ID.

  7. Les jetons sont sauvegardés par le logiciel SDK App ID et redirigés vers l'application client.

  8. L'utilisateur est autorisé à accéder à l'application.

Configuration du logiciel SDK Node.js

Vous pouvez configurer App ID pour qu'il fonctionne avec vos applications Web Node.js.

Avant de commencer

Vous devez disposer des prérequis suivants :

  • Une instance du service App ID
  • Un ensemble de données d'identification du service
  • NPM version 4 ou ultérieure
  • Noeud version 6 ou ultérieure
  • Votre URI de redirection défini dans le tableau de bord du service App ID

Essayez-le vous-même en utilisant un simple exemple d'application Node.

Installation du logiciel SDK Node.js

  1. A l'aide de la ligne de commande, accédez au répertoire contenant votre application Node.js.

  2. Installez le service App ID.

    npm install --save ibmcloud-appid
    

Initialisation du logiciel SDK Node.js

  1. Ajoutez les définitions require suivantes à votre fichier server.js :

    const express = require('express');
    const session = require('express-session')
    const passport = require('passport');
    const WebAppStrategy = require("ibmcloud-appid").WebAppStrategy;
    const CALLBACK_URL = "/ibm/cloud/appid/callback";
    
  2. Configurez votre application Express pour qu'elle utilise le middleware express-session.

    const app = express();
    app.use(session({
       secret: "123456",
       resave: true,
       saveUninitialized: true
    }));
    app.use(passport.initialize());
    app.use(passport.session());
    

    Vous devez configurer le middleware avec le stockage de session approprié pour les environnements de production. Pour plus d'informations, voir le fichier express.js.

  3. Procurez-vous vos données d'identification de l'une des manières suivantes :

    • Accédez à l'onglet Applications du tableau de bord App ID. Si aucune application ne figure dans la liste, cliquez sur Ajouter une application pour en créer une.

    • En soumettant une demande POST au noeud final /management/v4/<tenantId>/applications.

      Format de la demande :

      curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer <IAMToken>' \
      -d '{"name": "ApplicationName"}'
      

      Exemple de réponse :

      {
      "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
      "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
      "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
      "name": "ApplicationName",
      "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
      }
      
  4. Facultatif : déterminez comment formater votre URI de redirection. La redirection peut être formatée de deux manières différentes : Si aucune des options suivantes n'est fournie, le SDK App ID tente de récupérer le application_uri de l'application qui s'exécute sur IBM Cloud et d'y ajouter un suffixe par défaut /ibm/cloud/appid/callback.

    • Manuellement dans un nouveau WebAppStrategy({redirectUri: "...."})
    • En tant que variable d'environnement nommée redirectUri
  5. En utilisant les informations obtenues aux étapes précédentes, initialiser le logiciel SDK.

    passport.use(new WebAppStrategy({
    tenantId: "<tenantID>",
    clientId: "<clientID>",
    secret: "<secret>",
    oauthServerUrl: "<oauthServerURL>",
    redirectUri: "<appURL>" + CALLBACK_URL
    }));
    
  6. Configurez passport avec la sérialisation et la désérialisation. Cette étape de configuration est requise pour la persistance de session authentifiée dans les demandes HTTP. Pour plus d'informations, voir la documentation sur les passeports.

    passport.serializeUser(function(user, cb) {
       cb(null, user);
       });
    passport.deserializeUser(function(obj, cb) {
       cb(null, obj);
       });
    
  7. Ajoutez le code suivant à votre fichier server.js pour émettre les redirections de service.

    app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME));
    
  8. Enregistrez votre noeud final protégé en ajoutant le fragment de code suivant dans votre fichier app.js.

    app.get(‘/protected_resource’, passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res) {res.json(req.user); });
    

Pour plus d'informations, voir le référentielApp ID Node.js GitHub.

Configuration du logiciel SDK Liberty for Java

Vous pouvez configurer App ID pour qu'il fonctionne avec vos applications Web Liberty for Java.

Avant de commencer

Vous devez disposer des prérequis suivants :

  • Une instance du service App ID
  • Un ensemble de données d'identification du service
  • Apache Maven version 3.5 ou ultérieure
  • Java 1.8
  • Application Web Liberty for Java

Essayez-le vous-même en utilisant un simple exemple d'application Liberty for Java.

Installation du logiciel SDK Liberty for Java

  1. Ajoutez une fonction OpenID Connect à votre fichier server.xml.

    <featureManager>
       <feature>ssl-1.0</feature>
       <feature>appSecurity-2.0</feature>
       <feature>openidConnectClient-1.0</feature>
    </featureManager>
    
  2. Procurez-vous vos données d'identification de l'une des manières suivantes :

    • Accédez à l'onglet Applications du tableau de bord App ID. Si aucune application n'est encore répertoriée, cliquez sur Ajouter une application pour en créer une.

    • En soumettant une demande POST au noeud final /management/v4/<tenantID>/applications.

      Format de la demande :

      curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer <IAMToken>' \
      -d '{"name": "ApplicationName"}'
      

      Exemple de réponse :

      {
      "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
      "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
      "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
      "name": "ApplicationName",
      "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
      }
      
  3. Créez une fonction Open ID Connect Client et définissez les espaces réservés suivants. Utilisez les données d'identification du service pour remplir les espaces réservés.

    <openidConnectClient
       clientId='App ID client_ID'
       clientSecret='App ID Secret'
       authorizationEndpointUrl='oauthServerUrl/authorization'
       tokenEndpointUrl='oauthServerUrl/token'
       jwkEndpointUrl='oauthServerUrl/publickeys'
       issuerIdentifier='Changed according to the region'
       tokenEndpointAuthMethod="basic"
       signatureAlgorithm="RS256"
       authFilterid="myAuthFilter"
       trustAliasName="ibm.com"
    >
    
    Variables d'élément OIDC pour les applications Liberty for Java
    Composant Description
    clientID
    secret
    oauth-server-url
    Effectuez l'étape 2 pour obtenir vos données d'identification du service.
    authorizationEndpointURL Ajoutez /authorization à la fin de votre oauthServerURL.
    tokenEndpointUrl Ajoutez /token à la fin de votre oauthServerURL.
    jwkEndpointUrl Ajoutez /publickeys à la fin de votre oauthServerURL.
    issuerIdentifier L'identificateur de l'émetteur prend la forme suivante: &lt;region>&gt;.cloud.ibm.com. Reportez-vous à cette section sur les régions disponibles.
    tokenEndpointAuthMethod Spécifié en tant que "de base".
    signatureAlgorithm Spécifié en tant que "RS256".
    authFilterid Liste des ressources à protéger.
    trustAliasName Nom de votre certificat dans le magasin de clés de confiance.

Initialisation du logiciel SDK Liberty for Java

  1. Dans votre fichier server.xml, définissez un filtre d'autorisation pour spécifier des ressources protégées. Si aucun filtre n'est défini, le service protège toutes les ressources.

    <authFilter id="myAuthFilter">
       <requestUrl id="myRequestUrl" urlPattern="/protected_resource" matchType="contains"/>
    </authFilter>
    
  2. Définissez votre type de sujet spécial en tant que ALL_AUTHENTICATED_USERS.

    <application type="war" id="ProtectedServlet" context-root="/appidSample" location="${server.config.dir}/apps/libertySample-1.0.0.war">
       <application-bnd>
             <security-role name="myrole">
                <special-subject type="ALL_AUTHENTICATED_USERS"/>
             </security-role>
       </application-bnd>
    </application>
    
  3. Téléchargez le fichier libertySample-1.0.0.war à partir de GitHub et placez-le dans le dossier "apps" de votre serveur. Par exemple, si votre serveur se nomme defaultServer, le fichier war se trouve ici target/liberty/wlp/usr/servers/defaultServer/apps/.

  4. Configurez SSL en ajoutant ce qui suit à votre fichier server.xml. Vous devez également créer un magasin de clés de confiance.

       <keyStore id="defaultKeyStore" password="myPassword"/>
       <keyStore id="appidtruststore" password="Liberty" location="${server.config.dir}/mytruststore.jks"/>
       <ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef="appidtruststore"/>
    

Par défaut, la configuration SSL nécessite que le magasin de clés de confiance soit configuré pour OpenID Connect. En savoir plus sur la configuration d'un client OpenID Connect dans Liberty.

Configuration du logiciel SDK Spring Boot for Java

Vous pouvez configurer App ID pour qu'il fonctionne avec vos applications Spring Boot.

Avant de commencer

Vous devez disposer des prérequis suivants :

  • Une instance du service App ID
  • Un ensemble de données d'identification du service
  • Un projet Java + Maven
  • Apache Maven version 3.5 ou ultérieure
  • Java 1.8
  • Spring Boot version 2.0 et Security OAuth version 2.0 ou ultérieure

Initialisation de l'infrastructure Spring Boot

  1. Ajoutez le code suivant entre les balises <project> </project> dans votre fichier Maven pom.xml.

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.2.RELEASE</version>
       <relativePath/>
    </parent>
    
  2. Ajoutez les dépendances suivantes à votre fichier Maven pom.xml.

    <dependencies>
       <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
       </dependency>
       <dependency>
             <groupId>org.springframework.security.oauth.boot</groupId>
             <artifactId>spring-security-oauth2-autoconfigure</artifactId>
             <version>2.0.0.RELEASE</version>
       </dependency>
    </dependencies>
    
  3. Dans le même fichier, incluez le plug-in Maven.

    <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    

Initialisation d'OAuth2

  1. Ajoutez les annotations suivantes à votre fichier Java.

    @SpringBootApplication
    @EnableOAuth2Sso
    
  2. Etendez la classe avec WebSecurityConfigurerAdapter.

  3. Remplacez toutes les configurations de sécurité et enregistrez votre noeud final protégé.

       @Override
       protected void configure(HttpSecurity http) throws Exception {
          http.authorizeRequests()
                   .antMatchers("/protected_Resource").authenticated()
                   .and().logout().logoutSuccessUrl("/").permitAll();
       }
    

Ajout de données d'identification

  1. Procurez-vous vos données d'identification de l'une des manières suivantes :

    • Accédez à l'onglet Applications du tableau de bord App ID. Si aucune application n'est encore répertoriée, cliquez sur Ajouter une application pour en créer une.

    • En soumettant une demande POST au noeud final /management/v4/<tenantID>/applications.

      • Format de la demande :
        curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <IAMToken>' \
        -d '{"name": "ApplicationName"}'
        
      • Exemple de réponse :
        {
        "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
        "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
        "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
        "name": "ApplicationName",
        "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
        }
        
  2. Ajoutez un fichier de configuration application.yml au répertoire /springbootsample/src/main/resources/. Vous pouvez compléter votre configuration avec les informations provenant de vos données d'identification du service.

    security:
    oauth2:
       client:
       clientId: <clientID>
       clientSecret: <clientSecret>
       accessTokenUri: <oauthServerURL>/token
       userAuthorizationUri: <oauthServerURL>/authorization
       resource:
       userInfoUri: <oauthServerURL>/userinfo
    

Utilisation d'App ID dans d'autres langues

Avec un logiciel SDK client compatible OIDC, vous pouvez utiliser App ID dans d'autres langues. Pour plus d'informations, consultez la liste des bibliothèques certifiées.

Etapes suivantes

App ID est installé dans votre application ? Vous êtes pratiquement prêt à commencer l'authentification des utilisateurs ! Essayez d'effectuer l'une des activités suivantes :