• 15 hours
  • Easy

Free online content available in this course.

Certificate of achievement available at the end this course

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 7/11/17

Google Accounts API : authentifiez vos visiteurs

Log in or subscribe for free to enjoy all this course has to offer!

Nous avons passé suffisamment de temps sur des choses un peu compliquées : Cloud SQL, Datastore, Blobstore, Cloud Storage, Objectify... Je vous propose de souffler un peu et de découvrir par la même occasion d'autres services qui sont fournis par l'API de Google App Engine.

Parce que oui, les services d'App Engine ne se limitent pas au stockage ! On peut aussi télécharger des fichiers, manipuler des images, planifier des tâches, générer des APIs... et authentifier ses utilisateurs facilement. C'est justement ce dernier point que nous allons voir ici.

Google App Engine nous permet en un rien d'effort de créer une section membres sur notre site. Vos membres pourront se connecter avec leur compte Google ou même avec un OpenID, et vous n'avez presque rien à coder pour ça !

Authentifier les utilisateurs

Google App Engine nous permet d'authentifier nos utilisateurs par 2 méthodes différentes :

  • API Google Accounts : vous pouvez autoriser toute personne possédant un compte Google à se connecter à votre application. Les comptes Google sont généralement des adresses e-mail @gmail.com mais il peut parfois s'agir d'autres e-mails dans certains cas.

  • Domaine Google Apps : si vous réalisez une application pour les besoins d'un groupe ou d'une entreprise qui possède un compte Google Apps, c'est la méthode idéale. Seules les personnes appartenant à votre domaine (par ex. *@entreprise.com) pourront se connecter à votre application.

Rendez-vous dans Compute / App Engine / Paramètres si vous souhaitez modifier cette valeur :

Options d'authentification de l'application
Options d'authentification de l'application

Dans la plupart des cas, vous laisserez l'option par défaut qui est la plus simple. Elle permet à toute personne possédant un compte Google de se connecter facilement à votre application.

Dans votre code, vous avez juste besoin de générer :

  • Une URL pour se connecter

  • Une URL pour se déconnecter

Google se charge du reste. :)

On peut faire tout ça directement dans la JSP.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ page import="com.google.appengine.api.users.*" %>

<% UserService userService = UserServiceFactory.getUserService(); %>

<!DOCTYPE html>

<html>
	<head>
		<title>Application App Engine</title>
		<meta charset="utf-8" />
	</head>

	<body>
		<h1>Bienvenue dans mon application</h1>
		
		<% if (userService.getCurrentUser() == null) { %>
			<p><a href="<%= userService.createLoginURL("/") %>">Se connecter</a></p>
		<% }
		else { %>
			<p>Bonjour <%= userService.getCurrentUser().getNickname() %></p>
			<p><a href="<%= userService.createLogoutURL("/") %>">Se déconnecter</a></p>
		<% } %>
	</body>
</html>

Ce code est très simple : on récupère le service UserService de Google et on vérifie si l'utilisateur est déjà connecté avec userService.getCurrentUser(). Cette méthode renvoie null si l'utilisateur n'est pas connecté, et elle renvoie un objet de type User s'il est connecté.

Selon si l'utilisateur est connecté ou non, vous pouvez générer une URL de connexion ou de déconnexion avec userService.createLoginURL("/") et userService.createLogoutURL("/"). La valeur en paramètre indique où l'utilisateur doit ensuite être redirigé sur votre site (ici, "/" correspond à l'accueil).

On peut ensuite récupérer le pseudonyme de l'utilisateur avec userService.getCurrentUser().getNickname() (qui peut être aussi son e-mail) ou bien directement l'e-mail avec userService.getCurrentUser().getEmail().

Si vous testez ce code en local, vous verrez que le serveur "simule" une mini-page de connexion qui ressemble à ceci :

La fausse page de connexion en local
La fausse page de connexion en local

Vous pouvez rentrer n'importe quelle adresse, vous serez immédiatement connecté.

Bien sûr, une fois votre application en ligne, vos utilisateurs passeront par le vrai processus de connexion d'un compte Google :

La vraie page de connexion une fois l'application en ligne
La vraie page de connexion une fois l'application en ligne

Et voilà, vous venez de mettre en place un super système de connexion sur votre site en quelques minutes à peine ! :)

Protéger des URLs

Google App Engine nous fournit un moyen basique et très simple de protéger rapidement tout un groupe d'URLs.

Il suffit d'éditer le fichier web.xml et d'y ajouter les lignes suivantes :

<security-constraint>
	<web-resource-collection>
		<url-pattern>/admin/*</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>admin</role-name>
	</auth-constraint>
</security-constraint>

Ici, je protège toutes les URLs commençant par /admin/ et je les réserve uniquement aux admins.

Les admins de l'application sont ceux qui ont un rôle de viewer, developer ou owner au sein de l'application. On les ajoute dans le menu Autorisations du dashboard App Engine :

Ajout d'utilisateurs sur le projet
Ajout d'utilisateurs sur le projet

En développement local, vous pouvez simuler une connexion administrateur en cliquant sur "Sign in as administrator" dans la fausse page de connexion qui est générée.

De la même façon, vous pouvez réserver des pages à tous vos membres connectés avec un compte Google. Il vous suffit d'indiquer le rôle "*" :

<security-constraint>
	<web-resource-collection>
		<url-pattern>/membres/*</url-pattern>
		<url-pattern>/upload/*</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>*</role-name>
	</auth-constraint>
</security-constraint>

Ici, tout le contenu des dossiers /membres/ et /upload/ sera réservé aux membres connectés.

Example of certificate of achievement
Example of certificate of achievement