8

Ho un server di autorizzazione OAuth di Spring e desidero aggiungere il supporto per più di un client (id). Ho configurato i clienti in questo modo:Aggiunta di più di un client al server di autenticazione OAuth2 di Spring

clients 
      .inMemory().withClient(client).secret(clientSecret) 
      .resourceIds(resourceId) 
      .authorizedGrantTypes("client_credentials", "password", "refresh_token", "implicit", "authorization_code") 
      .authorities("ROLE_USER") 
      .scopes("read", "write") 
      .autoApprove(true) 
      .and() 
      .inMemory().withClient("acme").secret("acmesecret") 
      .resourceIds(resourceId) 
      .authorizedGrantTypes("client_credentials", "password", "refresh_token", "implicit", "authorization_code") 
      .authorities("ROLE_USER_ACME") 
      .scopes("read", "write") 
      .autoApprove(true); 

posso ottenere token di accesso con il primo cliente, ma ottengo questo errore quando si cerca di ottenere il token di accesso con il secondo cliente:

{ 
    "timestamp": 1456822249638, 
    "status": 401, 
    "error": "Unauthorized", 
    "message": "Bad credentials", 
    "path": "/oauth/token" 
} 

E 'possibile aggiungere più allora un cliente e come farlo? Inoltre, come leggere i client da un database?

risposta

7

Non utilizzare più inMemory costruttori, invece concatenare più withClient s all'interno di una inMemory:

@Override 
public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
    clients.inMemory() 
       .withClient("first") 
       .secret("secret") 
       .scopes("read") 
       .authorizedGrantTypes("password") 
      .and() 
       .withClient("sec") 
       .secret("secret") 
       .scopes("read") 
       .authorizedGrantTypes("password"); 
} 
+3

E 'possibile raggiungere questo obiettivo attraverso l'application.yml-file invece? –

+0

@AndreasLundgren: Hai avuto ancora fortuna con il file '.yml'? – frhd

+0

No, alla fine abbiamo ignorato oAuth2 poiché in realtà non disponevamo di alcun sistema di back-end di terze parti che necessitasse di accesso, solo i sistemi e i client interni di BE. –