IBM Cloud Docs
Applications de back end

Applications de back end

Vous pouvez utiliser les SDK et API IBM Cloud® App ID pour protéger les noeuds finaux et les API de votre application d'arrière-plan.

Comprendre le flux

Le développement d'applications de back end consiste notamment à vérifier que vos API sont protégées contre les accès non autorisés. Les SDK App ID vous aident à protéger vos nœuds finaux d'API et à garantir la sécurité de votre application.

Quelle est la base technique du flux ?

App ID met en œuvre les spécifications OAuth 2.0 et OIDC, qui utilisent des jetons de support pour l'authentification et l'autorisation. Ces jetons sont formatés en tant que jetons Web JSON, qui sont signés numériquement et contiennent des revendications qui décrivent le sujet authentifié et le fournisseur d'identité. Les API de votre application sont protégées par des jetons d'accès et d'identité. Les clients qui doivent accéder à vos API peuvent s'authentifier auprès du fournisseur d'identité via App ID en échange de ces jetons. Les revendications figurant dans les jetons doivent être validées pour accorder l'accès aux API protégées.

Pour plus d'informations sur l'utilisation des jetons dans App ID, voir Connaissance des jetons.

A quoi ressemble le flux ?

App ID backend flow
Backend application flow

  1. Un client effectue une demande POST sur le serveur d'autorisations App ID afin d'obtenir un jeton d'accès. Une demande POST est généralement au format suivant :

    POST /oauth/v4/<tenantID>/token HTTP/1.1
    Content_type: application/x-www-form-urlencoded
    Authorization header = "Basic" + base64encode(<clientID>:<secret>)
    FormData = <grantType>
    
  2. Si le client remplit les conditions requises, le serveur d'autorisations renvoie un jeton d'accès.

  3. Le client envoie une demande à la ressource protégée. Les demandes peuvent être envoyées de plusieurs manières, selon la bibliothèque client HTTP utilisée, mais elles se présentent généralement sous la forme suivante :

    curl -H 'Authorization: Bearer <accessToken>'
    <https://my-protected-resource.com>
    
  4. La ressource protégée ou l'API valide le jeton. Si le jeton est valide, l'accès à la ressource est accordé au client. Si le jeton ne peut pas être validé, l'accès est refusé.

Pour plus d'informations sur la configuration de votre application pour l'utilisation de Liberty for Java, voir Démarrage rapide : Tutoriel des applications dorsaux Liberty for Java.

Protection des ressources avec le SDK Node.js

Vous pouvez utiliser les logiciels SDK App ID pour imposer l'authentification et l'autorisation à vos applications côté serveur. ApiStrategy sécurise vos ressources de back end en exigeant que les jetons d'accès et d'identité soient validés dans le cadre de la demande. Le App ID Node.js SDK fonctionne avec le framework Passport.

Visionnez la vidéo suivante pour en savoir plus sur la protection des applications Node de back end avec App ID. Ensuite, essayez-le vous-même en utilisant un exemple d'application Node simple.

Avant de commencer

Avant de commencer avec le SDK Node.js, vous devez respecter les prérequis suivants.

  • Une instance d'App ID
  • NPM version 4 ou ultérieure
  • Noeud version 6 ou ultérieure

Installation du logiciel SDK Node.js

  1. Ajoutez le logiciel SDK Node.js App ID au fichier package.json de votre application.

    "dependencies": {
       "ibmcloud-appid": "^7.0.0"
    }
    
  2. Exécutez la commande suivante.

    npm install
    

Initialisation du logiciel SDK Node.js

  1. Obtenez votre oauth server url.

    1. Accédez à l'onglet Données d'identification pour le service du tableau de bord App ID.
    2. Si vous ne disposez pas encore d'un ensemble de données d'identification, cliquez sur Nouvelles données d'identification puis sur Ajouter pour créer un nouvel ensemble. Dans le cas contraire, ignorez cette étape.
    3. Cliquez sur le bouton Afficher les données d'identification pour afficher vos informations.
    4. Copiez votre URL oauth server url à utiliser à l'étape suivante.
  2. Initialisez la stratégie Passport App ID, comme indiqué dans l'exemple suivant.

    var express = require('express'); 
    var passport = require('passport');
    var APIStrategy = require('ibmcloud-appid').APIStrategy; 
    passport.use(new APIStrategy({ oauthServerUrl: "<oauthServerUrl>" })); 
    var app = express();
    app.use(passport.initialize());
    

Sécurisation de l'API avec la stratégie d'API

Le fragment suivant montre comment utiliser ApiStrategy dans une application Express pour protéger l'API GET /protected.

Si votre application Node.js s'exécute sur IBM Cloud et est liée à votre instance d'App ID, il n'est pas nécessaire de fournir la configuration de la stratégie d'API. La configuration d'App ID obtient les informations à l'aide de la variable d'environnement VCAP_SERVICES.

 app.get('/protected_resource', passport.authenticate('APIStrategy.STRATEGY_NAME', { session: false }), function(request, response){
   console.log("Security context", request.appIdAuthorizationContext);
   response.send(200, "Success!");
   }
);

Lorsque les jetons sont valides, le middleware suivant de la chaîne de demande est appelé et la propriété appIdAuthorizationContext est ajoutée à l'objet de la demande. La propriété contient les jetons d'accès et d'identité d'origine ainsi que les informations de contenu décodées des jetons.

Protection des ressources avec le SDK Swift

Le serveur SDK Swift App ID côté serveur fournit un plug-in de logiciel intermédiaire de protection de l'API qui est utilisé pour protéger vos applications de back end. En associant vos API au middleware, vous pouvez protéger votre application contre les accès non autorisés. Une fois l'API protégée, le middleware s'assure que les jetons générés par App ID sont validés. Vous pouvez alors modifier le comportement de l'API en fonction des résultats de la validation.

import Foundation
import Kitura              // server
import Credentials         // middleware
import IBMCloudAppID       // SDK

// setup routes
let router = Router()

// mandatory option to be passed in if app not deployed on IBM Cloud
let options = [
    "oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/d8438de6-c325-4956-ad34-abd49194affd",
]
let apiCreds = Credentials()

// Minimum macOS version required
if #available(OSX 10.12, *) {

    // setup API protection
    let apiKituraCredentialsPlugin = APIKituraCredentialsPlugin(options: options)
    apiCreds.register(plugin: apiKituraCredentialsPlugin)

    // associate route with API protection
    router.all(middleware: apiCreds)

    // create protected API
    router.get("/protectedendpoint") { request, response, next in

        response.headers["Content-Type"] = "text/html; charset=utf-8"
        do {
            if let userProfile = request.userProfile  {
                try response.status(.OK).send(
                    "<!DOCTYPE html><html><body>" +
                        "Welcome " + userProfile.displayName  +
                        "! You are logged in with " + userProfile.provider + "." +
                    "</body></html>\n\n").end()
                next()
                return
            }
            try response.status(.unauthorized).send(
                "<!DOCTYPE html><html><body>” + “You are not authorized!" +
                "</body></html>\n\n").end()
        }
        catch {}
        next()
    }

    // Start server
    Kitura.addHTTPServer(onPort: 8090, with: router)

    Kitura.run()  
}

Protection manuelle des ressources

Pour sécuriser vos ressources protégées et vos applications de back end, vous devez valider un jeton. Lorsqu'un client envoie une demande à votre ressource, vous pouvez vérifier que le jeton répond aux spécifications définies. Le jeton peut inclure des informations d'identification, une portée ou toute autre configuration en place. Vous pouvez valider des jetons d'accès et d'identité App ID de plusieurs manières. Pour obtenir de l'aide, voir Validation des jetons.

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 :