2014-04-24 4 views
8

Je travaille actuellement sur une application Web basée sur Java EE 7, PostgreSQL et le serveur d'application GlassFish 4. J'ai besoin de mettre en place une authentification basée sur un formulaire et de sécuriser certaines URL en sachant que:Java EE 7 Authentification par formulaire

  • les utilisateurs et les rôles/groupes (quel que soit leur nom) sont stockés dans la base de données.
  • Je voulais que ma demande soit comme « standard » que possible (je suis actuellement en utilisant JSF et JPA, et aucun autre cadre comme ressort, Struts ...)

Après quelques recherches, je trouve que Java EE a fourni un mécanisme d'authentification standard appelé JASPIC. J'ai donc concentré mes recherches sur JASPIC et j'ai lu plusieurs Q/A de Stackoverflow et ces articles écrits par Arjan Tijms (Il est presque impossible de trouver un Q/A Stackoverflow lié à Java EE sans une de ses réponses ou commentaires, merci à lui le chemin):

Ma question est: va JASPIC me permettre de faire ce que je dois (sous forme d'authentification + restriction d'URL avec des rôles) et est-il vaut le coup Comment l'utiliser? Ce que je veux dire, c'est: il est peut-être plus sûr et plus facile d'utiliser un autre mécanisme. Arjan Tijms dit aussi que le fait d'utiliser JASPIC est "une sorte de problème de poulet et d'oeuf" et si JASPIC est sûr à utiliser (il ne crée pas plus de problèmes qu'il n'en résout), peu importe le montant de code que j'ai besoin d'écrire, je veux vraiment être "l'un des premiers poulets".

+2

La sécurité est d'augmenter la sécurité, pas de l'imposer. Vous êtes aussi sûr que le lien le plus faible dans votre environnement d'exécution du système, souvent ce lien le plus faible est un être humain. À mon avis honnête, tout ce que vous devez savoir pour vous décider est le premier (merveilleux) lien que vous avez publié. Merci de partager ceux d'ailleurs. Autre que cela, il y a aussi la page de tutoriels JEE sur la sécurité: http://docs.oracle.com/javaee/6/tutorial/doc/gkbaa.html – Gimby

Répondre

-4

je ne fais pas savoir JASPIC mais peut je vous suggère de jeter un oeil à la shiro framework

Il nous allons vous faire tout ce dont vous avez besoin à peu près en fonction de votre poste avec une configuration minimale.

+1

J'évite généralement d'utiliser des frameworks comme Shiro à moins que je ne prévoie prendre le contrôle de l'ensemble de l'authentification/autorisation de l'application dans un niveau Web uniquement. Principalement parce que la plate-forme cible ne supporte pas l'ensemble de la pile Java EE. –

-4

Pour l'authentification et l'autorisation basées sur un formulaire, vous avez besoin de JAAS. passer par l'url suivant - linK

+1

Les choses sont quelque chose de plus subtil dans Java EE, vous devriez jeter un oeil à [ce post] (http://arjan-tijms.omnifaces.org/2014/02/jaas-in-java-ee-is-not-universal .html). – bdulac

3

J'utilise JASPIC pour mon authentification, mais JASPIC a une limitation que vous devez composer avec (si vous voulez les choses standard). Vous êtes limité à ne pas avoir de dépendances en dehors de l'API Java EE 7. Cela signifie que l'accès aux ressources JDBC qui nécessitent un pilote n'est pas une capacité explicitement indiquée dans les normes.

Dans mon OpenID Connect implementation, j'ai utilisé Google comme magasin sécurisé, qui me présente également le formulaire de connexion Google. C'est un exemple plus large d'utilisation de JASPIC.

Pour vous, vous pouvez exposer un EJB à l'espace de noms global et utiliser InitialContext pour obtenir l'EJB. Il y aurait une certaine duplication de code en ce sens que vous devez copier le code de l'interface distante EJB à deux endroits et vous assurer que les serialVersionID sont les mêmes sur les deux. L'EJB peut être utilisé pour se connecter aux ressources JPA pour obtenir vos données d'autorisation. Utilisez les EJB, car les deux autres options envisageables sont REST et SOAP, qui exposeraient quelque chose sur vos ports Web et nécessiteraient une configuration supplémentaire pour empêcher tout accès non autorisé ou exiger qu'ils soient placés sur un autre système.

Une implémentation JASPIC simple que j'ai créée au cas où vous voulez apprendre est le HTTP Header JASPIC module qui est destiné à l'intégration avec des systèmes plus complexes comme SiteMinder.

+0

Cet exemple de mise en œuvre est génial! :) –

Questions connexes