# Autenticación y autorización en la plataforma #

El consumo de servicios que requieren autenticación y autorización basada en el usuario (perfil) requieren un Identificador de sesión válido o el par de credenciales (usuario y contraseña).

## Autenticación ##

End point: https://api.induxsoft.net/auth/login/

### Autenticación con usuario y contraseña ###
Solicitud
```
Method: POST
Content-Type: application/json;charset=utf-8
{
	"uid":"Identificador del usuario (correo electrónico o teléfono móvil)",
	"pwd":"Contraseña",
  "memberships":true/false (opcional, predeterminado false)
}
```

* Cuando se ha establecido memberships=true, la respuesta incuirá todas las membrecías que tiene el usuario (los espacios de trabajo, equipos y roles)

Respuesta exitosa
```
Content-Type: application/json;charset=utf-8
{
	"success":true,
	"data":
  {
    "ids":"Identificador de sesión válido",
    "uid":"Identificador interno del usuario",
    "name":"Nombre del usuario",
    "multifactor":true/false,
    "verified_email":true/false,
    "verified_mobile":true/false,
  }
}
```
* ids es una GUID (cadena de 32 caracteres) que representa un 'token' de sesión
* uid es una cadena con una GUID que es el identificador interno en la plataforma para el usuario
* name es el 'nombre completo' del usuario según su registro
* multifactor es un booleano que indica si está habilitada la autenticación multifactor
* verified_email indica si el correo del usuario está verificado
* verified_mobile indica si el número de teléfono móvil del usuario está verificado

### Validación de identificador de sesión ###
Solicitud
```
Method: POST
Content-Type: application/json;charset=utf-8
{
	"ids":"Identificador de sesión a verificar",
}
```
Respuesta exitosa
```
Content-Type: application/json;charset=utf-8
{
	"success":true,
	"data":
  {
    "ids":"Identificador de sesión válido",
    "uid":"Identificador interno del usuario",
    "name":"Nombre del usuario"
  }
}
```

## Cierre de sesión ##
End point: https://api.induxsoft.net/auth/logout/

Solicitud
```
Method: POST
Content-Type: application/json;charset=utf-8
{
	"ids":"Identificador de sesión a terminar",
}
```
Respuesta exitosa
```
Content-Type: application/json;charset=utf-8
{
	"success":true,
	"data":null
}
```

## Autorización ##
Informa si un determinado usuario (identificado por  usuario/contraseña o id de sesión) está vinculado a una cuenta de cliente (organización) y si tiene derecho a utilizar un determinado servicio de la plataforma.

Requisitos:
* [Lista de identificadores de servicio](identificadores-de-servicio.md)
* Cuenta de cliente, es el Número de Identificación de Cliente (NIC) de Induxsoft, generalmente una secuencia de 6 u 8 dígitos

End point: https://api.induxsoft.net/auth/management/

### Autorización con usuario y contraseña ###
Solicitud
```
Method: POST
Content-Type: application/json;charset=utf-8
{
	"uid":"Identificador del usuario (correo electrónico o teléfono móvil)",
	"pwd":"Contraseña",
	"account":"Cuenta de cliente (organización)",
	"service":"Identificador de servicio de la plataforma"
}
```
Respuesta exitosa
```
Content-Type: application/json;charset=utf-8
{
	"success":true,
	"data":
  {
    "ids":"Identificador de sesión válido",
    "uid":"Identificador interno del usuario",
    "name":"Nombre del usuario",
    "multifactor":true/false,
    "verified_email":true/false,
    "verified_mobile":true/false,
    "grant":true/false
  }
}
```
* El campo ```grant``` será ```true``` únicamente si el usuario está autorizado para utilizar el servicio en nombre de la cuenta de cliente (organización) indicada, en cualquier otro caso el servicio devolverá la respuesta de error o el campo ```grant``` será ```false```.

### Autorización con Id de sesión ###
Solicitud
```
Method: POST
Content-Type: application/json;charset=utf-8
{
	"ids":"Identificador de sesión",
	"account":"Cuenta de cliente (organización)",
	"service":"Identificador de servicio de la plataforma"
}
```
Respuesta exitosa
```
Content-Type: application/json;charset=utf-8
{
	"success":true,
	"data":
  {
    "ids":"Identificador de sesión válido",
    "uid":"Identificador interno del usuario",
    "name":"Nombre del usuario",
    "grant":true/false
  }
}
```
