J'essaie de trouver un moyen simple et flexible d'ajouter l'authentification JaaS à REST. J'ai trouvé un post qui, selon moi, me mène dans la bonne direction (voir la réponse de StevenC). Il semble que le conteneur de servlet soit responsable de la sécurité, pas le code de Jersey lui-même. J'aime cette idée, mais j'ai besoin de quelques conseils sur la mise en œuvre. Grizzly est mon conteneur de servlet et je veux le configurer pour utiliser JaaS pour l'authentification. Pour l'instant, une combinaison simple nom d'utilisateur/mot de passe serait bien, et coder en dur les paires nom d'utilisateur/mot de passe directement dans le code est très bien. Tant qu'il utilise JaaS, nous pouvons affiner ces détails plus tard.Utilisation de JaaS avec Jersey sur Grizzly
En ce qui concerne ce qui est envoyé via HTTP, je pense que stocker un cookie serait le moyen le plus facile de faire fonctionner tout cela. Tout ce qu'il faut pour garder les déchets d'authentification loin de mon code de Jersey.
Voici le code pour commencer Grizzly jusqu'à présent:
final String baseUri = "http://localhost:9998/";
final Map initParams = new HashMap();
initParams.put("com.sun.jersey.config.property.packages",
"my.jersey.Service");
System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
System.out.println(String.format(
"Jersey app started with WADL available at %sapplication.wadl\n"
+ "Try out %shelloworld\nHit enter to stop it...", baseUri, baseUri));
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);
Si ce processus fonctionne, quelle est la meilleure façon de vérifier les autorisations pour l'utilisateur? Je voudrais probablement que mon code REST valide réellement les autorisations à certains points. Suis-je même sur la bonne voie? Y a-t-il un moyen plus facile? Un lien vers un tutoriel serait une excellente réponse. Même une réponse comme «Je l'ai fait et ça a marché» me donnerait un vague sentiment que je suis dans la bonne direction.
Merci pour toute aide.
EDIT: Quelques précisions pour le commentaire de StevenC:
- Voulez-vous encore utiliser des filtres de servlet pour protéger vos ressources? Je vais utiliser tout ce qui peut séparer les détails d'authentification du code de Jersey. Ce ne doit pas être des filtres de servlet. Que veut dire «configurer pour utiliser JaaS»? Le plan original était de protéger l'API actuelle en utilisant JaaS. La prochaine étape consistera à rendre l'ensemble de l'API disponible en ligne. Il semblait logique d'avoir un wrapper de Jersey autour des appels d'API, mais de garder l'authentification gérée par Grizzly. Grizzly devrait interagir avec JaaS à ce moment-là je crois.
- Pensez-vous qu'il devrait y avoir une certaine config qui cause simplement grizzly pour protéger vos ressources? Je considérais un processus en deux étapes d'authentification de l'utilisateur et basé sur les rôles, autorisant l'utilisateur à accéder aux ressources. L'idée était d'avoir l'authentification Grizzly handle (en utilisant JaaS) et Jersey gérer l'autorisation.
- "Je ne vois pas le besoin d'utiliser des cookies avec une ressource RESTful." Ce serait merveilleux d'enlever l'utilisation de cookies, mais comment peut-on l'accomplir? Le système doit savoir si l'utilisateur est authentifié. Je préfère ne pas leur demander de passer un nom d'utilisateur/mot de passe/etc pour chaque appel. Même passer un jeton de session comme paramètre à chaque appel semble "moche".
En outre, s'il vous plaît noter que je suis assez nouveau à REST. Je fais du SOAP depuis quelques années, donc j'ai peut-être un «biais SOAP» qui peut m'empêcher de trouver une solution simple et évidente que tout le monde utilise. S'il y a un moyen plus facile, n'hésitez pas à partager. J'essaie juste d'apprendre autant que possible.
Je devrais probablement avoir commenté avant de poster ma réponse, mais la question a besoin d'un peu de clarification: - Voulez-vous encore utiliser des filtres de servlet pour protéger vos ressources? - Que signifie "configurer pour utiliser JaaS"? Pensez-vous qu'il devrait y avoir une certaine config qui cause simplement le grizzly pour protéger vos ressources? - JaaS lui-même n'est qu'un framework et vous devez brancher une authentification "realm" ou source (implémentée avec un LoginModule). - Je ne vois pas le besoin d'utiliser des cookies avec une ressource RESTful (en supposant que c'est ce que vous voulez utiliser jersey pour). – StevenC
@ User1, avez-vous déjà vécu ce projet? Je me suis arraché les cheveux toute la journée pour que l'authentification HTTP fonctionne. (Juste posté une [question similaire] (http://stackoverflow.com/questions/14608162/basic-http-authentication-with-jersey-grizzly) plus tôt aujourd'hui.) – aioobe
Je ne pense pas que je l'ai jamais fonctionné. Pardon. Je fais beaucoup avec Jetty à dos de chameau. C'est un paradigme totalement différent mais qui fonctionne mieux pour ma situation. En guise de conseil, j'évite l'authentification HTTP et j'utilise des sessions à la place. Un utilisateur doit se connecter avec une sorte de formulaire, puis je lui donne les droits sur les pages appropriées. Cette conception fonctionne pour tout serveur HTTP qui effectue des sessions. – User1