2013-07-21 5 views
3

J'essaye de mettre en place un serveur d'autorisation Oauth2.0 dans Spring.OAuth2 Client Authentification Spring

Je suis en mesure de récupérer un authorization_code pour un utilisateur via:
/oauth/authorize

mais quand je prends ce code et essayer de racheter un jeton pour elle à oauth:
/oauth/token
Je reçois un erreur 401: "Bad credentials"

l'URL que j'utilise pour récupérer le authorization_code est:

http://localhost:8084/Oauth/oauth/authorize?response_type=code&client_id=tonr&redirect_uri=www 

et la commande curl-je utiliser pour tenter de saisir le jeton est:

Je ne suis pas sûr d'avoir quelque chose de mal configuré, ou si je suis juste malentendu comment oauth2 est censé fonctionner. des idées?

ici est mon security.xml:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:oauth="http://www.springframework.org/schema/security/oauth2" 
      xmlns:mvc="http://www.springframework.org/schema/mvc" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd 
        http://www.springframework.org/schema/security/oauth2 http://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd 
         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <http auto-config='true'> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /> 
       <user name="bob" password="bobspassword" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

    <oauth:client-details-service id="clientDetails"> 
     <oauth:client client-id="tonr" resource-ids="sparklr" authorized-grant-types="authorization_code,implicit" 
         authorities="ROLE_CLIENT" scope="read,write" secret="secret" /> 
    </oauth:client-details-service> 

    <beans:bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.InMemoryTokenStore" /> 

    <beans:bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices"> 
     <beans:property name="tokenStore" ref="tokenStore" /> 
     <beans:property name="supportRefreshToken" value="true" /> 
     <beans:property name="clientDetailsService" ref="clientDetails" /> 
    </beans:bean> 

    <beans:bean id="userApprovalHandler" class="org.springframework.security.oauth2.provider.approval.TokenServicesUserApprovalHandler"> 
     <beans:property name="tokenServices" ref="tokenServices"/> 
    </beans:bean> 

    <oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices" 
           user-approval-handler-ref="userApprovalHandler"> 
     <oauth:authorization-code /> 
     <oauth:implicit /> 
     <oauth:refresh-token /> 
     <oauth:client-credentials /> 
     <oauth:password /> 
    </oauth:authorization-server> 

    <mvc:annotation-driven /> 
</beans:beans> 

et voici mon web.xml:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>Oauth</display-name> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <!-- this mapping is added so that view requests are not defaulted to the app-servlet declared above /\ --> 
    <servlet-mapping> 
     <servlet-name>jsp</servlet-name> 
     <url-pattern>/WEB-INF/views/*</url-pattern> 
    </servlet-mapping> 

    <!-- security stuff--> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/security.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

Toute aide est grandement appréciée!

Répondre

4

répondre à ma propre question:

Il se trouve que l'application de printemps seulement eu 2 utilisateurs viables:

<user-service> 
    <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /> 
    <user name="bob" password="bobspassword" authorities="ROLE_USER" /> 
</user-service> 

Mon client TONR n'a pas été dans ce service de l'utilisateur, si le printemps a gardé le rejeter. J'ai juste besoin d'ajouter la liste des clients à un ClientDetailsUserDetailsService:

<beans:bean id="clientDetailsUserService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService"> 
     <beans:constructor-arg ref="clientDetails" /> 
</beans:bean> 

puis ajouter que la mise en œuvre de UserDetailsService à la fève <authentication-manager/>:

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /> 
      <user name="bob" password="bobspassword" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
    <authentication-provider user-service-ref="clientDetailsUserService" /> 
</authentication-manager> 
Questions connexes