39 votes

L'authentification de l'utilisateur sur un Maillot de service REST

Je suis en train d'élaborer un REPOS, qui est une application en utilisant le cadre de Jersey. Je voudrais savoir comment je peux contrôler l'authentification de l'utilisateur. J'ai cherché dans de nombreux endroits, et le plus proche de l'article que j'ai trouvé est ceci: http://weblogs.java.net/blog/2008/03/07/authentication-jersey.

Cependant cet article ne peut être utilisé avec un serveur GlassFish et un joint de la base de données. Est-il de toute façon que je peux implémenter une interface en Jersey et l'utiliser comme un filtre avant d'atteindre la demande RESTE des ressources?

Je veux utiliser l'authentification de base, mais il doit être suffisamment souple pour que je puisse le changer plus tard.

32voto

user346087 Points 431

Je suis avec succès à l'aide de printemps de sécurité pour la sécurisation de mon Maillot, basé sur l'API. Il a d'authentification enfichables régimes de vous permettre de passer d'Authentification Basique à autre chose plus tard. Je ne suis pas à l'aide de Printemps en général, tout les trucs de sécurité.

Voici la partie pertinente de mon web.xml

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/security-applicationContext.xml,
        /WEB-INF/applicationContext.xml
    </param-value>
</context-param>

<!-- Enables Spring Security -->

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
        org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
    <init-param>
        <param-name>targetBeanName</param-name>
        <param-value>springSecurityFilterChain</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>

Vous pouvez laisser applicationContext.xml vide (<beans></beans>). Un exemple de l'security-applicationContext.xml peut être trouvé ici

8voto

Nick Klauer Points 2837

Je suis en train de travailler sur quelque chose de semblable à cela. Dans mon implémentation, nous avons Apache httpd avant-clos pour gérer l'authentification HTTP de Base et simplement, il transmet toutes les demandes avec quelques informations d'en-tête contenant les utilisateurs et les rôles.

De cela, je suis en train de travailler sur l'analyse de ces pièces à l'aide d'un filtre de servlet pour envelopper l' HttpServletRequest à l'aide d'un post que j'ai trouvé sur CodeRanch. Ceci me permet d'utiliser l' javax.annotation.security d'annotation comme @RolesAllowed sur chaque ressource, je veux filtre. Pour obtenir toutes ces pièces de travail, cependant, j'ai dû ajouter ce qui suit à mon servlet dans l' web.xml:

<servlet>
  <!-- some other settings and such 
  ... -->
  <init-param>
    <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
    <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
  </init-param>
  ...
</servlet>

Vous trouverez peut-être que Eric Warriner sa réponse sur un post récent d'intérêt: http://stackoverflow.com/questions/2291323/jersey-spring-tomcat-and-security-annotations

4voto

fasseg Points 7654

J'ai récemment écrit un article sur la sécurisation d'un jersey web RESTful application Tomcat à l'aide de JDBC de Domaine et les Entités JPA que vous pouvez consulter ici:

http://objecthunter.congrace.de/tinybo/blog/articles/89

espère que ça aide

4voto

millebi Points 31

Jetez un oeil ici, je suis dans le milieu de l'essayer, mais il semble prometteur:

http://anismiles.wordpress.com/2012/03/02/securing-versioning-and-auditing-rest-jax-rs-jersey-apis/

Cet exemple est beaucoup plus simple que d'essayer de mettre en œuvre JASPI/JASPIC et donne une meilleure granularité de l'individu méthodes (@RolesAllowed, @PermitAll, @DenyAll, etc...).

(Je sais c'est un vieux thread, mais simplement l'ajout d'informations pouvant s'avérer utiles)

3voto

ae6rt Points 1144

Bien sûr, vous pouvez utiliser une traditionnelle filtre de servlet pour cela.

Ajouter le filtre de votre web.xml, vérifiez quelle que soit la en-têtes d'authentification que vous utilisez (de Base ou Digest), effectuez votre logique d'authentification basée sur ces valeurs, et de stocker le résultat dans un attribut de session. Dans votre Maillot de ressources (ctor probablement), extrait de l'auth résultat de l'attribut de session et de continuer le traitement ou pas selon si c'est le résultat que vous désirez.

Votre Maillot de ressources ctor serait probablement ressembler à ceci:

protected AbstractResource(@Context ServletContext servletContext, 
    @Context HttpServletRequest httpServletRequest) {

    ...

    HttpSession session = httpServletRequest.getSession();
    // get whatever you put in the session in the auth filter here and compare
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X