Più token di accesso Oauth2

13

Ho un'API che utilizza oAuth2 e le mie app mobili che utilizzano questa API come back-end. Poiché gli utenti possono accedere tramite più dispositivi (ad esempio iPhone, iPad, tablet Android o telefono Android) allo stesso tempo, ho bisogno dell'API per distinguere tra ciascuna connessione. Vorrei farlo tramite token di accesso separati: ogni client riceve un token di accesso separato.

Il problema è che l'attuale implementazione che utilizziamo (spring-security-oauth2) genera una chiave univoca basata su client_id, nome utente e ambito. Quindi, sostanzialmente, quando si ottiene un token di accesso, tutti i client ottengono lo stesso token di accesso per lo stesso utente. Questo viene fatto usando DefaultAuthenticationKeyGenerator.

È sicuro ignorare il generatore di chiavi di autenticazione e creare semplicemente un nuovo token di accesso su ogni richiesta da un client?

    
posta checklist 18.08.2015 - 09:52
fonte

2 risposte

1

Spring cloud fornisce già questo comportamento. Basta aggiungere diversi client. Come iosAppClient, androidAppClient nella classe AuthorizationServerConfiguration.

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
                clients.inMemory().withClient("androidAppclient")
                    .secret("clientsecret")
                    .autoApprove(true)
                    .accessTokenValiditySeconds(120)
                    .authorizedGrantTypes("password")
                    .resourceIds("accountservice")
                    .scopes("read", "write")
                    .and()
                    .withClient("iosappclient")
                    ........

        }

Nel backend puoi ottenere il clientID come il seguente

clientId = ((OAuth2Authentication) authentication).getOAuth2Request().getClientId();

e implementa un comportamento diverso basato su clientId.

    
risposta data 30.06.2017 - 15:02
fonte
0

Una risposta è che ogni piattaforma dell'app è un client diverso, quindi dovrebbe avere un ID client diverso. Uno per l'app iOS, uno per il sito web, ecc.

Per quanto riguarda la differenziazione tra un iPad e un iPhone, suggerisco di non fare affidamento sul sistema OAuth per questo.

    
risposta data 30.07.2017 - 18:36
fonte

Leggi altre domande sui tag