Autenticación vía OAuth

El sistema soporta por defecto autenticación usando el protocolo OAuth 2.0.

Para hacer uso de esta autenticación, primero se ha de crear una aplicación, que puede ser creada desde el panel de administración.

Crear aplicación

Si no está creada la aplicación, crearemos una nueva, teniendo en cuenta que:

  • El campo client type tendrá el valor de Confidential.

  • El campo authorization grant type tendrá el valor de de Resource owner password-based.

Una vez creado, nos quedaremos con los valores de client id y client secret que el backend habrá generado automáticamente.

Obtener un access token

Podemos obtener un access token válido para autenticar las llamadas haciendo la siguiente petición:

POST /api/v1/auth/oauth/token/

Ejemplo de petición:

POST /api/v1/auth/oauth/token/ HTTP/1.1
Content-Type: application/json
Authorization: Basic S2Q4U1RUc055Y2RYZEtXSHFXOVMyY1JpZXVCVTRLeW4yUDRydTRJeTpadnNlZGwxaDkxbkUzd3Qza2RmRUsxRjRnVUhZeDc5V0N1OXduUUR5ZlB1Skpqem9BbmpOR01VQ0JJZUZEN1RRNmVTbFQyT1pUeUNJbTZoMjZ6c2NCSUM2SzJhaHA2U2FRZENrbUs0d015dUNRb0Vvb1RZVjdoUzZVbXFxQlUwMg

{
    "grant_type": "password",
    "username": "email@example.com",
    "password": "password",
}

Ejemplo de respuesta:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "IURMeAXBxcOpm82B9xvUuITTexgY3z",
    "expires_in": 36000,
    "token_type": "Bearer",
    "scope": "read write",
    "refresh_token": "EJX1gyc6sSYQk7HBdLubULX6uGgzaM"
}

La cabecera Authorization tiene el resultado de aplicar la codificación en base 64 a la cadena {client id}:{client secret}, donde {client id} se corresponde con la cadena client id obtenida en la creación de la aplicación y {client secret} a la cadena client secret obtenida también en la creación de la aplicación.

Refrescar un access token

Usando el campo refresh_token de la respuesta de la petición anterior, se puede refrescar el token de la siguiente manera:

POST /api/v1/auth/oauth/token/

Ejemplo de petición:

POST /api/v1/auth/oauth/token/ HTTP/1.1
Content-Type: application/json
Authorization: Basic S2Q4U1RUc055Y2RYZEtXSHFXOVMyY1JpZXVCVTRLeW4yUDRydTRJeTpadnNlZGwxaDkxbkUzd3Qza2RmRUsxRjRnVUhZeDc5V0N1OXduUUR5ZlB1Skpqem9BbmpOR01VQ0JJZUZEN1RRNmVTbFQyT1pUeUNJbTZoMjZ6c2NCSUM2SzJhaHA2U2FRZENrbUs0d015dUNRb0Vvb1RZVjdoUzZVbXFxQlUwMg

{
    "grant_type": "refresh_token",
    "refresh_token": "EJX1gyc6sSYQk7HBdLubULX6uGgzaM",
}

Ejemplo de respuesta:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "18xGgi3bQG4yArnP9sAEgr6pubqh2K",
    "expires_in": 36000,
    "token_type": "Bearer",
    "scope": "read write",
    "refresh_token": "sHIMWkToz2rwjpVIE4hrd7g2EaVGbE"
}

Realizar una petición con autenticación

Una vez obtenido el token, se puede usar para hacer una petición al API que requiera autenticación. Por ejemplo:

GET /api/v1/users/me/

Ejemplo de petición:

GET /api/v1/users/me/ HTTP/1.1
Content-Type: application/json
Authorization: Bearer 18xGgi3bQG4yArnP9sAEgr6pubqh2K