Présentation de l'API Users pour Java

L'API Users permet à une application de :

  • détecter si l'utilisateur actuel s'est connecté ;
  • transférer l'utilisateur vers la page de connexion appropriée pour se connecter ;
  • demander à l'utilisateur de votre application de créer un compte Google s'il n'en a pas déjà un.

Lorsqu'un utilisateur est connecté à l'application, celle-ci peut accéder à l'adresse e-mail de cet utilisateur. L'application peut également détecter si l'utilisateur actuel est un administrateur (également appelé "utilisateur administrateur"), ce qui facilite la mise en œuvre des zones de l'application réservées aux administrateurs.

Authentifier les utilisateurs dans Java

L'exemple suivant permet de saluer un utilisateur connecté à l'application en affichant un message personnalisé et un lien de déconnexion. Si l'utilisateur n'est pas connecté, l'application propose un lien vers la page de connexion pour les comptes Google.

Vous pouvez vérifier que l'utilisateur est connecté et obtenir son adresse électronique à l'aide de l'API du servlet standard, avec la méthode getUserPrincipal() de l'objet de la requête. Vous pouvez faire appel à l'API du service Users pour générer des URL de connexion et de déconnexion.

Java 8

package com.example.appengine.users;

import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
@WebServlet(
    name = "UserAPI",
    description = "UserAPI: Login / Logout with UserService",
    urlPatterns = "/userapi"
)
public class UsersServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    UserService userService = UserServiceFactory.getUserService();

    String thisUrl = req.getRequestURI();

    resp.setContentType("text/html");
    if (req.getUserPrincipal() != null) {
      resp.getWriter()
          .println(
              "<p>Hello, "
                  + req.getUserPrincipal().getName()
                  + "!  You can <a href=\""
                  + userService.createLogoutURL(thisUrl)
                  + "\">sign out</a>.</p>");
    } else {
      resp.getWriter()
          .println(
              "<p>Please <a href=\"" + userService.createLoginURL(thisUrl) + "\">sign in</a>.</p>");
    }
  }
}

Java 7

package com.example.appengine.users;

import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UsersServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {
    UserService userService = UserServiceFactory.getUserService();

    String thisUrl = req.getRequestURI();

    resp.setContentType("text/html");
    if (req.getUserPrincipal() != null) {
      resp.getWriter().println("<p>Hello, "
          + req.getUserPrincipal().getName()
          + "!  You can <a href=\""
          + userService.createLogoutURL(thisUrl)
          + "\">sign out</a>.</p>");
    } else {
      resp.getWriter().println("<p>Please <a href=\""
          + userService.createLoginURL(thisUrl)
          + "\">sign in</a>.</p>");
    }
  }
}

L'API du service Users peut renvoyer les informations sur l'utilisateur actuel sous forme d'un objet User. Les objets User peuvent être stockés en tant que valeur de propriété dans le datastore. Toutefois, nous vous conseillons vivement d'éviter de le faire, car cela inclut l'adresse e-mail et l'ID unique de l'utilisateur. Imaginez qu'un utilisateur modifie son adresse e-mail. Si vous comparez l'ancienne valeur User stockée à la nouvelle valeur User, celles-ci ne correspondent pas. Envisagez plutôt d'utiliser la valeur ID utilisateur User comme identifiant unique stable de l'utilisateur.

Définir des contraintes d'accès (connexion ou droits d'administrateur) avec le fichier web.xml

Si vous avez des pages auxquelles l'utilisateur ne devrait pas pouvoir accéder sans être connecté, vous pouvez définir une contrainte de sécurité pour ces pages dans le descripteur de déploiement (le fichier web.xml). Si un utilisateur accède à une URL avec une contrainte de sécurité et qu'il n'est pas connecté, App Engine le redirige automatiquement vers la page de connexion (pour l'authentification des comptes Google ou G Suite), puis renvoie l'utilisateur à l'URL une fois celui-ci connecté ou inscrit.

Une contrainte de sécurité peut également exiger que l'utilisateur soit un administrateur enregistré pour l'application. Cela signifie que l'utilisateur doit disposer du rôle primitif "Lecteur", "Éditeur" ou "Propriétaire", ou du rôle prédéfini "Administrateur App Engine". Vous pouvez ainsi créer plus facilement sur le site des sections réservées à l'administrateur, sans qu'il soit nécessaire de mettre en œuvre un mécanisme d'autorisation distinct.

Pour savoir comment définir les contraintes de sécurité pour des URL, consultez la page relative à la sécurité et l'authentification du descripteur de déploiement pour le fichier web.xml.

Options d'authentification

Votre application peut authentifier les utilisateurs à l'aide de l'une des options suivantes :

  • Un compte Google
  • Un compte sur votre domaine G Suite

Choisir une option d'authentification

Une fois votre application créée, vous pouvez choisir l'option d'authentification que vous souhaitez utiliser. Par défaut, votre application utilise les comptes Google. Pour sélectionner une autre option, telle que le domaine G Suite, accédez à la page des paramètres de votre projet dans la console Google Cloud Platform, puis cliquez sur Modifier. Dans le menu déroulant Authentification Google, sélectionnez le type d'authentification souhaité, puis cliquez sur Enregistrer.

Se connecter et se déconnecter

Une application peut détecter si un utilisateur s'est connecté avec l'option d'authentification choisie pour votre application. Si l'utilisateur n'est pas connecté, l'application peut le diriger vers les comptes Google, pour se connecter ou créer un compte Google. L'application obtient l'URL de la page de connexion en appelant une méthode de l'API Users. L'application peut afficher cette URL sous forme de lien, ou envoyer une redirection HTTP vers l'URL lorsque l'utilisateur visite une page exigeant une authentification.

Si votre application utilise les comptes Google ou G Suite pour l'authentification, le nom de votre application s'affiche sur la page de connexion lorsque l'utilisateur se connecte à votre application. Le nom affiché est le nom de l'application que vous avez spécifié lors de l'enregistrement de l'application. Vous pouvez le modifier dans le champ Nom de produit affiché pour les utilisateurs de la page Identifiants de la console Google Cloud Platform.

Une fois que l'utilisateur s'est connecté ou a créé un compte Google, il est redirigé vers votre application. L'application fournit l'URL de redirection à la méthode ayant généré l'URL de connexion.

L'API Users inclut une méthode de génération d'URL pour la déconnexion de l'application. L'URL de déconnexion désauthentifie l'utilisateur auprès de l'application, puis le redirige vers l'URL de l'application, sans que rien ne s'affiche.

Un utilisateur n'est pas connecté à une application avant d'y être invité par l'application et d'avoir saisi l'adresse e-mail et le mot de passe de son compte. Cela s'applique même si l'utilisateur s'est connecté à d'autres applications à partir de son compte Google.

Accéder aux informations de compte

Lorsqu'un utilisateur est connecté à une application, cette dernière peut accéder à l'adresse e-mail du compte pour chaque requête de l'utilisateur envoyée à l'application. Elle peut également accéder à un ID utilisateur qui authentifie l'utilisateur de manière unique, même s'il modifie l'adresse e-mail de son compte.

L'application peut également déterminer si l'utilisateur actuel est administrateur de l'application. Un administrateur est un utilisateur disposant du rôle primitif "Lecteur", "Éditeur" ou "Propriétaire", ou du rôle prédéfini "Administrateur App Engine". Vous pouvez utiliser cette fonctionnalité pour en élaborer d'autres relatives à l'administration de l'application, même sans authentifier d'autres utilisateurs. Les API Go, Java, PHP et Python facilitent la configuration des URL réservées aux administrateurs.

Users et le datastore

L'API du service Users peut renvoyer les informations de l'utilisateur actuel en tant qu'objet User. Les objets User peuvent être stockés en tant que valeur de propriété dans le datastore. Toutefois, nous vous conseillons vivement d'éviter de le faire, car cela inclut l'adresse e-mail et l'ID unique de l'utilisateur. Imaginez qu'un utilisateur modifie son adresse e-mail. Si vous comparez l'ancienne valeur User stockée à la nouvelle valeur User, celles-ci ne correspondent pas. Envisagez plutôt d'utiliser la valeur ID utilisateur User comme identifiant unique stable de l'utilisateur.

Comptes Google et le serveur de développement

Le serveur de développement simule le système de comptes Google en utilisant une page de connexion factice. Lorsque votre application appelle l'API Users pour obtenir l'URL de la page de connexion, l'API renvoie une URL spéciale du serveur de développement qui invite l'utilisateur à saisir une adresse e-mail, mais pas de mot de passe. Vous pouvez saisir n'importe quelle adresse e-mail. L'application agira comme si vous étiez connecté avec un compte doté de cette adresse.

La page de connexion factice inclut également une case à cocher qui indique si le compte factice est un administrateur, précisant que le compte dispose du rôle primitif "Lecteur", "Éditeur" ou "Propriétaire", ou du rôle prédéfini "Administrateur App Engine". Si vous cochez cette case, l'application agit comme si vous étiez connecté à partir d'un compte administrateur.

De la même manière, l'API Users renvoie une URL de déconnexion qui annule la connexion factice.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Java