Comment on fait sudo dans un EJB ?

Question curieuse, que mon chef m’a posé pas longtemps après que j’explique à @bmathus que

https://twitter.com/riduidel/status/258176811693907968

Ou, dans une réponse plus longue, que JAAS était une bonne idée :

Cela dit, plusieurs choses sont à retenir
– l’authentification/autorisation est gérée dans toutes nos couches
de manière homogène ET en utilisant toute la plomberie
JavaEE/Glassfish. C’est-à-dire que, en dehors des développeurs de la
partie royaume, la plupart des développeurs ne voient de la sécurité
que les annotations @RolesAllowed/@RunAs. C’est incroyablement
pratique au quotidien de ne pas avoir à se palucher d’envoi
d’exception ou quoi que ce soit d’autre.
– l’appli web et les web services utilisent une BASIC AUTH HTTP qui
passe elle aussi par ce royaume. Donc on est sûr de l’utilisateur d’un
bout à ‘lautre de l’application. Et, bonus, c’est pas moi qui ait
écrit le code de sécurité mais (j’espère) des mecs bien plus
paranoïaques que moi (pas dur, vu que j’oublie parfois de fermer ma
bagnole/ma maison à clé).
– l’API à implémenter est raisonnablement simple – du moins dans
Glassfish : dans l’ensemble, il faut juste être capable, étant donné
un login/password, de retourner une liste de noms de rôles
d’autorisation JAAS. Et, comme notre base est accédée via un
connecteur JCA, ce connecteur est disponible via JNDI (mouaip, pas une
goutte de CDI là-dedans) et donc dans le royaume, ce qui est
indispensable. Autrement dit, Glassfish gère bien mieux que moi
l’ordre de démarrage du bazar.

Dans les inconvénients, j’aurais tendance à dire que
– la doc peut être spartiate (en particulier ce qui concerne les
différentes choses à faire pour que le serveur d’application utilise
correctement le domaine)
– les logs sont soit trop peu nombreux soit trop verbeux (pas assez
nombreux si tu les enlève, mais trop verbeux dès que tu les active,
parce que chaque méthode d’EJB nécessite une authentification).

Hélas, je me suis retrouvé à poser la question fatidique : How can I change user principal during an EJB/MDB invocation?

Et je vous encourage vivement à aller voir la réponse que j’ai moi-même écrite pour cette question, puisqu’elle montre précisément comment, tout en n’étant pas un élément de la spec JavaEE, il est possible d’implémenter « proprement » ce sudo.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s