Saltar al contenido principal

Obtener un token de acceso

Objetivo​

Obtener un token de acceso OAuth2 del servicio de identidad de Parsware para poder llamar a las API de la plataforma durante el desarrollo.

Requisitos previos​

  • El servicio de identidad está en ejecución y es accesible (en el desarrollo local escucha en http://localhost:5000).
  • Se han creado los datos iniciales de desarrollo (se crean automáticamente en el primer arranque): un inquilino de desarrollo y una cuenta de administrador (admin@parsware.local).
  • Un cliente REST, como curl.

Pasos​

  1. Solicite un token al endpoint de tokens con el cliente de desarrollo y las credenciales del administrador creado inicialmente:

    curl -X POST http://localhost:5000/connect/token \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "grant_type=password" \
    -d "username=admin@parsware.local" \
    -d "password=Passw0rd!" \
    -d "scope=profile roles parsware.api offline_access" \
    -d "client_id=parsware-dev-cli" \
    -d "client_secret=dev-cli-secret"
  2. Lea el access_token de la respuesta JSON. La respuesta también incluye un refresh_token (porque se solicitó offline_access) y un valor expires_in en segundos.

  3. Llame a una API con el token en el encabezado Authorization. Para comprobar que el token funciona, llame al endpoint userinfo:

    curl http://localhost:5000/connect/userinfo \
    -H "Authorization: Bearer <access_token>"

    La respuesta identifica al usuario que ha iniciado sesión (sujeto, nombre, correo electrónico, inquilino).

Qué ocurre entre bastidores​

El servicio de identidad verifica la contraseña del administrador y emite un token de acceso JWT firmado. El token está firmado (no cifrado), de modo que cualquier servicio de la plataforma lo valida directamente con las claves de firma publicadas por el servicio de identidad: no hay ninguna llamada de vuelta al servicio de identidad en cada solicitud.

Solución de problemas​

  • invalid_grant: el nombre de usuario o la contraseña son incorrectos, o la cuenta está bloqueada tras varios intentos fallidos. Espere y vuelva a intentarlo, o restablezca la contraseña.
  • invalid_client: el client_id/client_secret no corresponde a ningún cliente registrado. En desarrollo, use parsware-dev-cli / dev-cli-secret.
  • invalid_scope: uno de los ámbitos solicitados no está permitido para el cliente. Solicite únicamente profile, roles, offline_access y parsware.api.
  • Conexión rechazada: el servicio de identidad no está en ejecución o escucha en otro puerto.
  • El token solo incluye mfa.enrol (su aud es parsware-mfa-enrolment): la cuenta es una cuenta de personal que aún no tiene aplicación de autenticación. La MFA es obligatoria para el personal: registre una (desde el perfil, o con POST /connect/mfa/enrolment y este token) y vuelva a solicitarlo con -d "mfa_code=<the six digits>". En una implementación, el administrador es quien indique PLATFORM_ADMIN_EMAIL en esa implementación, no admin@parsware.local.

Escenarios relacionados​

  • Inspeccionar las claves JWKS que publica el servicio de identidad.

La concesión por contraseña que se muestra aquí es una comodidad para el desarrollo que permite obtener un token desde la línea de comandos. El inicio de sesión interactivo real usa el flujo de código de autorización con PKCE a través del Shell de la plataforma.