Acceso
La autenticación con la API EasyClocking se basa en un modelo JWT. Primero se autentica llamando al punto final de inicio de sesión utilizando el código de la empresa, el nombre de usuario y la contraseña, esta información debe enviarse en el encabezado de autorización básica, la base64 de la matriz de bytes sobre el "código de la empresa: usuario: contraseña" con este formato y orden ( vea el ejemplo a continuación) le daremos el token de acceso en un encabezado de respuesta "X-AccessToken", luego deberá enviar el token para el resto de las llamadas de puntos finales en el mismo encabezado específico "X-AccessToken"
[C#]
public async Task< string > BasicAuthenticateDemoAsync(string companyCode, string username, string password)
{
using (var client = new HttpClient())
{ var credentials = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(string.Format("{0}:{1}:{2}", companyCode, username, password)));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
var res = await client.PostAsync(CreateUrl("https://[APIlink_server]/api/public/external/login"), new StringContent(string.Empty));
if (res.IsSuccessStatusCode)
{
var res_h = res.Headers.SingleOrDefault(x => x.Key == "X-AccessToken");
if (null != res_h.Value)
{
Token = res_h.Value.First(); return Token;
}
} return string.Empty;
}
}
Una llamada de Jquery, quedaría de la siguiente manera
[JQUERY]
$.ajax({
type: 'POST', contentType: "application/json; charset=utf-8", dataType: 'json', data: JSON.stringify({}),
url: https://[APIlink_server]/api/public/external/login,
data: {},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + window.btoa(unescape(encodeURIComponent(YOUR_COMPANY_CODE + ':'+ YOUR_USERNAME + ':' + YOUR_PASSWORD))))
}
});
Iniciar sesión Exitoso
Cuando la llamada de autenticación tiene éxito, devuelve un token válido en el encabezado "X-AccessToken" y el cuerpo de esta respuesta debe estar vacío, el ciclo de vida del token es de 180 minutos, luego debe autenticarse nuevamente para obtener un nuevo token.
Cada solicitud futura después del inicio de sesión debe ir acompañada del token devuelto por el punto final de inicio de sesión
public async Task< UserResultVM > GetUsersAsync(UserFilter filter, string token)
{
using (var client = new HttpClient())
{
Uri uri = new Uri("https://[APIlink_server]/api/public/external/User");
client.DefaultRequestHeaders.Add("X-AccessToken", token);
var response = await client.GetAsync(uri);
var result = new UserResultVM();
var a = response.RequestMessage;
if (response.StatusCode == HttpStatusCode.OK)
{
result.Users_total_count = Convert.ToInt32(response.Headers.SingleOrDefault(x => x.Key == "X-Total-Count").Value.First());
result.Users = await response.Content.ReadAsAsync< List < UserVM > >();
return result;
}
else
{ //do something according to the response.StatusCode obtained, see all posibles status codes at the endpoint description
throw new HttpResponseException(response.StatusCode.ToString());
}
}
}
Alcance del token
El token de acceso tendrá el mismo alcance que el usuario que inició sesión. KIS TA tiene 3 niveles de usuarios, usuarios básicos que solo tienen acceso a sus propios datos, Gerentes que pueden tener acceso a ciertas ubicaciones y departamentos y algunos privilegios configurados previamente y Administradores que tener acceso completo, lo que significa que si alguien inicia sesión y obtiene un token con un conjunto de credenciales de un administrador, cuando los Usuarios del punto final se extraen usando ese token para obtener todos los usuarios, el sistema solo responderá con los usuarios correspondientes a la ubicación del administrador y privilegios departamentales.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.