juin
2009
Lorsqu’on développe une application Web, c’est pour des utilisateurs et à moins que l’application ne s’adresse à tous de la même manière, on a besoin de comptes pour mémoriser des préférences et/ou des droits spécifiques.
Qui dit comptes dit identifiants (login/password) et donc authentification et c’est justement un service que propose GAE.
Nous allons donc voir :
- en quoi consiste l’authentification Google ?
- comment tester par vous même ?
- comment l’utiliser ?
- pourquoi on devrait l’utiliser ?
- pourquoi on ne devrait pas l’utiliser ?
=> En quoi consiste l’authentification Google ?
C’est simple, GAE vous permet d’utiliser les comptes Google.
A la manière d’un serveur CAS, vous déléguez l’authentification à Google :
- Un utilisateur se connecte à votre application web par une URL d’accès.
- Il est dirigé vers la page de login du système d’authentification
(directement ou via le bouton « Connexion » d’une page d’accueil intermédiaire qui peut être la partie publique de votre application) - Ce système l’authentifie en validant la correspondance de son login et de son mot de passe. L’utilisateur reste sur cette page tant qu’il n’est pas authentifié.
- Une fois authentifié, il est redirigé vers l’application d’origine qui sait de qu’il il s’agit (login/email).
Notez bien que l’application n’a pas connaissance du mot de passe et n’en a pas besoin car même si elle délègue l’authentification à un tiers,
elle décidera comment gérer un utilisateur authentifié et à partir du login, elle peut très bien ensuite interdire l’accès.
Il y a une petite différence avec un serveur CAS :
Si Google Account peut être considéré comme le SSO de Google, vous permettant de passer d’un de leur service à l’autre sans avoir à vous ré-authentifié, lorsque vous vous connectez à une application GAE, vous devrez renseigner à nouveau votre mot de passe.
Google précise bien qu’ils n’ont rien à voir avec l’application GAE (Qui a dit que les utilisateurs ne lisent pas les messages ??? lol) et cette manière de procéder (en évitant l’authentification transparente) laisse à l’utilisateur le temps de bien voir le message :
=> Comment tester par vous même ?
Si vous avez un compte Google, vous pouvez tester sans risque (ayez confiance) l’authentification Google avec cette démonstration.
Mais en local, vous ne pouvez pas réellement tester puisque le service est simulé sans vérification (c’est pour cette raison que vous avez une case à cocher admin) :
=> Comment l’utiliser ?
-
Dans tous les cas (client en GWT ou non), vous devrez utiliser le service de google côté serveur.
Avec une simple servlet, cela donne :import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class DemoServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
{
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null)
{
response.setContentType("text/plain");
response.getWriter().println("Bonjour " + user.getEmail());
}
else
{
response.sendRedirect(userService.createLoginURL(request.getRequestURI()));
}
}
} - Autoriser l’identification de tous les comptes Google ou uniquement ceux de votre domaine Google Apps
Attention, ce choix se fait uniquement à la création d’une application, est exclusif et ne peut être changé par la suite :
- Donner un profil particulier pour des administrateurs
Côté code, c’est assez simple, il suffit de tester si l’utilisateur courant est un administrateur avec la méthode userService.isAdmin().
Si ce n’est pas vous, il faut cependant avoir préalablement ajouter son compte Google dans le tableau de bord de votre application :
- Ajouter le comme développeur :
- Qu’il réceptionne l’email et valide le lien :
- Qu’il approuve les conditions :
- Et c’est fait :
- Ajouter le comme développeur :
=> Pourquoi on devrait l’utiliser ?
- Parce que ça vous évite de gérer un mécanisme d’authentification (login/mots de passe) et que pour votre usage personnel, cela suffit amplement.
- Parce que ça peut faciliter l’accès à votre application (L’utilisateur n’a pas besoin de s’inscrire) et si l’accès par tous les comptes Google vous gène, ce n’est pas un problème dans la mesure où votre application fait ce qu’elle veut des utilisateurs authentifiés (Elle peut les faire passer par une étape de validation où vous accepter/refuser les candidats).
- Parce qu’en utilisant Google Apps, vous limiter l’accès à votre application uniquement à ceux de votre domaine Google Apps (Votre association, votre entreprise, …).
=> Pourquoi on ne devrait pas l’utiliser ?
- Parce que vous aurez à expliquer à vos utilisateurs « les moins doués » qui ont oubliés leur mot de passe Google, pourquoi vous n’y pouvez rien !!!
- Parce que vous allez inévitablement gérer des données sur l’utilisateur et gérer un mot de passe en plus n’est pas particulièrement coûteux. L’argument que l’authentification Google est plus sécurisé ne tient pas si on estime que les datastores de Google Apps sont au moins aussi sécurisés que Google Account.
- Parce que ça peut freiner ceux qui voudraient s’inscrire dans votre application mais pas créer/utiliser un compte Google et parce que gérer à la fois vos propres comptes et ceux de Google amène de la complexité inutile.
- Parce que vous devenez encore plus dépendant de Google et si un jour vous décidez de porter votre application ailleurs, il faudra informer vos utilisateurs qu’ils doivent désormais s’inscrire à votre application. Actuellement, bien qu’il utilise « Google Account », le « UserService » fournit par GAE n’est pas OpenId. Ce qui est d’autant incompréhensible que Google supporte OpenID 2.0 ! Espérons que ce sera pris en compte dans une future version.
- Parce que leur système actuel (à défaut de ne pas être ouvert) est encore un peu trop rigide :
Le choix entre « Tous les comptes Google » et « Ceux de votre domaine Google Apps » est exclusif et fixé une fois pour toute.
Si on peut avoir des profils administateur/utilisateur, l’administrateur est forcément un développeur qui a accès également à la console d’administration et ce n’est peut être pas ce que vous souhaitez.
Voilà, je pense avoir fait le tour du sujet.
Si vous avez des questions/remarques, n’hésitez pas …
Non, rien n’est prévu dans GAE et leur petit truc d’admin, bien que pratique pour un usage personnel finit par embrouiller.
Le rôle d’un système d’authentification est d’authentifier avant tout.
Après, il est du ressort de l’application de gérer des droits spécifiques.
Est il possible d’affecter des authorisations aux utilisateurs ? Si comme je le pense cela n’est pas possible on se retrouve avec un système plutôt basique !
non authentifié -> connecté -> admin
-> pas admin