Múltiples tokens de acceso Oauth2

13

Tengo una API que usa oAuth2 y mis propias aplicaciones móviles que usan esta API como backend. Dado que los usuarios pueden iniciar sesión a través de múltiples dispositivos (es decir, iPhone, iPad, tableta Android o teléfono Android) al mismo tiempo, necesito la API para distinguir entre cada conexión. Me gustaría hacer esto a través de tokens de acceso separados: cada cliente obtiene un token de acceso separado.

El problema es que la implementación actual que usamos (spring-security-oauth2) genera una clave única basada en client_id, nombre de usuario y alcance. Básicamente, al obtener un token de acceso, todos los clientes obtienen el mismo token de acceso para el mismo usuario. Esto se hace usando DefaultAuthenticationKeyGenerator.

¿Es seguro ignorar el generador de claves de autenticación y simplemente crear un nuevo token de acceso en cada solicitud de un cliente?

    
pregunta checklist 18.08.2015 - 09:52

2 respuestas

1

La nube de primavera ya proporciona este comportamiento. Solo añada diferentes clientes. Como iosAppClient, androidAppClient en su clase 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")
                    ........

        }

En el backend puede obtener el ID de cliente como el siguiente

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

e implementa diferentes comportamientos basados en el ID de cliente.

    
respondido por el Rocks360 30.06.2017 - 15:02
0

Una respuesta es que cada plataforma de aplicaciones es un cliente diferente, por lo que debe tener un ID de cliente diferente. Una para la aplicación iOS, una para el sitio web, etc.

En cuanto a diferenciar entre decir un iPad y un iPhone, sugeriría no confiar en el sistema OAuth para esto.

    
respondido por el RibaldEddie 30.07.2017 - 18:36

Lea otras preguntas en las etiquetas