Printemps De Sécurité OAuth2 Serveur De Ressources Revenant Toujours Invalid Token

Je suis en train d'essayer d'obtenir une base en mémoire OAuth2 serveur en cours en utilisant le Printemps des Bibliothèques. J'ai été à la suite de la sparklr exemple.

Actuellement j'ai configuré le Serveur et presque tout fonctionne, cependant je ne peux pas accéder à mon limité de ressources du serveur de ressources.

Mon flux de travail de test:

  1. Accès oauth autorisé URI pour démarrer le OAuth2 flux: http://localhost:8080/server/oauth/authorize?response_type=code&client_id=client
  2. Rediriger vers la page de connexion: http://localhost:8080/server/login
  3. Poignée de l'approbation et de la rediriger vers mon configuré page de redirection w/un code de paramètre: http://localhost:8080/client?code=HMJO4K
  4. Construire une requête GET à l'aide de l'Authentification Basique à l'aide de l'id du client et secret avec le type de subvention et code: http://localhost:8080/server/oauth/token?grant_type=authorization_code&code=HMJO4K
  5. Recevoir un access_token et jeton d'actualisation de l'objet en retour

    {
    access_token: "f853bcc5-7801-42d3-9cb8-303fc67b0453"
    token_type: "au porteur"
    refresh_token: "57100377-dea9-4df0-adab-62e33f2a1b49"
    expires_in: 299
    champ d'application: "lecture-écriture"
    }

  6. Tentative d'accès à une ressource soumise à restriction à l'aide de l'access_token: http://localhost:8080/server/me?access_token=f853bcc5-7801-42d3-9cb8-303fc67b0453
  7. Recevoir une défaillance de jeton de répondre

    {
    erreur: "invalid_token"
    error_description: "Invalid jeton d'accès: f853bcc5-7801-42d3-9cb8-303fc67b0453"
    }

  8. POST pour le jeton uri de nouveau pour rafraîchir jeton: http://localhost:8080/server/oauth/token?grant_type=refresh_token&refresh_token=57100377-dea9-4df0-adab-62e33f2a1b49
  9. Recevoir un nouveau jeton

    {
    access_token: "ed104994-899c-4cd9-8860-43d5689a9420"
    token_type: "au porteur"
    refresh_token: "57100377-dea9-4df0-adab-62e33f2a1b49"
    expires_in: 300
    champ d'application: "lecture-écriture"
    }

Je suis vraiment pas sûr de ce que je fais de mal, mais il semble que tout autres que l'accès restreint uri de travail. Voici ma configuration:

@Configuration
public class Oauth2ServerConfiguration {
private static final String SERVER_RESOURCE_ID = "oauth2-server";
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId(SERVER_RESOURCE_ID);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
.and().requestMatchers()
.antMatchers("/me")
.and().authorizeRequests()
.antMatchers("/me").access("#oauth2.clientHasRole('ROLE_CLIENT')")
;
}
}
@Configuration
@EnableAuthorizationServer
protected static class AuthotizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private ClientDetailsService clientDetailsService;
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client")
.resourceIds(SERVER_RESOURCE_ID)
.secret("secret")
.authorizedGrantTypes("authorization_code", "refresh_token")
.authorities("ROLE_CLIENT")
.scopes("read","write")
.redirectUris("http://localhost:8080/client")
.accessTokenValiditySeconds(300)
.autoApprove(true)
;
}
@Bean
public TokenStore tokenStore() {
return new InMemoryTokenStore();
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenStore(tokenStore())
.userApprovalHandler(userApprovalHandler())
.authenticationManager(authenticationManager)
;
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.realm("oauth");
}
@Bean
public ApprovalStore approvalStore() throws Exception {
TokenApprovalStore store = new TokenApprovalStore();
store.setTokenStore(tokenStore());
return store;
}
@Bean
public UserApprovalHandler userApprovalHandler() throws Exception {
TokenStoreUserApprovalHandler handler = new TokenStoreUserApprovalHandler();
handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientDetailsService));
handler.setClientDetailsService(clientDetailsService);
handler.setTokenStore(tokenStore());
return handler;
}
}
}

Est-il quelque chose que je suis absent ou suis-je aborder cette question de façon incorrecte? Toute aide serait grandement appréciée.

Après quelques essais, je n'arrive pas à le faire fonctionner. D'une certaine manière, il semble que le ResourceServer ne se charge pas le bon jeton de stocker ou de quelque chose. J'ai un jeton de stocker des haricots et autocâblés dans un contrôleur qui permet d'imprimer les invitations pour mon client, qui fonctionne très bien. Je autowire le même magasin de haricot (à l'aide unique qualificatif) dans un personnalisé gestionnaire d'authentification, et il ne peut pas trouver tout tokes dans le magasin. Je ne suis pas vraiment sûr de savoir comment cela est possible, à moins que quelque chose est implicitement session étendue??

OriginalL'auteur jyore | 2015-04-12