
Introducción
A continuación se presentan una serie de ejemplos de código fuente, en distintos lenguajes de programación, sobre como solicitar tokens de acceso al servidor de autorización del INS.
El INS dispone de dos ambientes para el consumo de APIs, ambiente de pruebas y de producción. Los URL para obtención de tokens de acceso para cada uno de estos ambiente son:
Pruebas:
https://apiintegracion.grupoins.com/connect/v1/token
Producción
https://apiintegracion.grupoins.com/connect/v1/token
cURL
curl --request POST \
--url 'https://apiintegracion.grupoins.com/connect/v1/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials \
--data 'client_id=client_id_asignado_por_el_ins' \
--data 'client_secret=client_secret_asignado_por_el_ins'
Python
import requests
# Paso 1: Obtener token
token_url = "https://apiintegracion.grupoins.com/connect/v1/token"
data = {
"grant_type": "client_credentials",
"client_id": "su_client_id",
"client_secret": "su_client_secret"
}
token_response = requests.post(token_url, data=data)
access_token = token_response.json()["access_token"]
# Imprime el resultado de obtencion de token
print(token_response)
print(access_token)
# Paso 2: Consumir la API con el token obtenido en el paso anterior
api_url = "https://apiintegracion.grupoins.com/polizas/v1/general/consulta?numeroPoliza=ABCXYZ"
headers = {"Authorization": f"Bearer {access_token}", "subscription-key": "<llave_subscription_asignada_por_ins>"}
response = requests.get(api_url, headers=headers)
# Imprime el resultado de la ejecucion del API
print(response.status_code)
print(response.json())
C# (.Net core)
Para compilar el siguiente código, se requiere agregar una referencia al paquete Newtonsoft.Json.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
class ConsolaInvocarAPI
{
static async Task Main(string[] args)
{
// URL del servidor de autorizacion
var tokenUrl = "https://apiintegracion.grupoins.com/connect/v1/token";
// Variables de credenciales
var clientId = "su_client_id"; // Reemplaza con tu client_id y client_secret
var clientSecret = "su_client_secret";
var subscritionKey = "<llave_subscripcion_asignada_por_ins>";
// Llamada para obtener el token
using (var client = new HttpClient())
{
// Datos a enviar en la solicitud POST para obtener el token
var parameters = new Dictionary<string, string>
{
{ "grant_type", "client_credentials" },
{ "client_id", clientId },
{ "client_secret", clientSecret }
};
var content = new FormUrlEncodedContent(parameters);
// Hacer la solicitud POST para obtener token
var response = await client.PostAsync(tokenUrl, content);
if (response.IsSuccessStatusCode)
{
// Leer la respuesta JSON
var responseBody = await response.Content.ReadAsStringAsync();
// Deserializar el JSON para obtener el token
var tokenResponse = JsonConvert.DeserializeObject<OAuthTokenResponse>(responseBody);
Console.WriteLine("Token: {0}", tokenResponse?.AccessToken);
// Llama al API con las credenciales obtenidas
await InvocarAPI("https://apiintegracion.grupoins.com/polizas/v1/general/consulta?numeroPoliza=ABCXYZ", tokenResponse?.AccessToken, subscritionKey);
}
else
{
// Si la respuesta no fue exitosa, mostrar el error
Console.WriteLine($"Error {((int)response.StatusCode)}: {response.ReasonPhrase}");
Console.WriteLine($"Error {response.Content.ReadAsStringAsync()}");
}
}
Console.ReadLine();
}
// Función para llamar a la API usando el token
public static async Task InvocarAPI(string URL, string token, string subscriptionKey)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
client.DefaultRequestHeaders.Add("subscription-key", subscriptionKey);
var response = await client.GetAsync(URL);
if (response.IsSuccessStatusCode)
{
var data = await response.Content.ReadAsStringAsync();
Console.WriteLine("Datos de la API: " + data);
}
else
{
Console.WriteLine("Error al acceder a la API: " + response.StatusCode);
}
}
}
// Clase para deserializar la respuesta del token
public class OAuthTokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
}
}
Java
Para compilar este ejemplo, se requieren los paquetes OkHttp para los llamados HTTP y Gson para procesar objetos JSON. Ambos disponibles en el repositorio MAVEN.
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.IOException;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class ConsolaInvocarAPI {
private static final OkHttpClient client = new OkHttpClient();
public static void main(String[] args) throws IOException
{
// Variables con URL y credenciales
String tokenUrl = "https://apiintegracion.grupoins.com/connect/v1/token";
String clientId = "su_client_id";
String clientSecret = "su_client_secret";
String subscriptionKey = "<llave_de_subscripcion_asignada_por_el_ins>";
// Paso 1: Obtener el token de acceso
String token = getTokenOauth(tokenUrl, clientId, clientSecret);
if (token != null && !token.isEmpty()) {
System.out.println("Token de acceso obtenido: " + token);
// Paso 2: Usar el token para llamar a la API protegida
// URL del recurso a invocar
String apiUrl = "https://apiintegracion.grupoins.com/polizas/v1/general/consulta?numeroPoliza=ABCXYZ";
invocarAPI(apiUrl, token, subscriptionKey);
} else {
System.out.println("Error al obtener el token.");
}
}
// Función para obtener el token OAuth 2.0
public static String getTokenOauth(String tokenUrl, String clientId, String clientSecret) {
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("grant_type", "client_credentials")
.add("client_id", clientId)
.add("client_secret", clientSecret)
.build();
Request request = new Request.Builder()
.url(tokenUrl)
.post(formBody)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
// Extraer el JSON de la respuesta
String responseBody = response.body().string();
// Extraer el token de la respuesta JSON usando expresiones regulares
return extractTokenFromJson(responseBody);
} else {
System.out.println("Error al obtener el token: " + response.code() + " " + response.message());
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// Función para llamar a la API usando el token
public static void invocarAPI(String apiUrl, String token, String subscriptionKey) {
Request request = new Request.Builder()
.url(apiUrl)
.addHeader("Authorization", "Bearer " + token)
.addHeader("subscription-key", subscriptionKey)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
// Leer la respuesta de la API
String responseBody = response.body().string();
System.out.println("Respuesta de la API: " + responseBody);
} else {
System.out.println("Error al acceder a la API: " + response.code() + " " + response.message());
}
} catch (IOException e) {
e.printStackTrace();
}
}
// Método para extraer "access_token" usando Gson
private static String extractTokenFromJson(String json) {
JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
return jsonObject.has("access_token") ? jsonObject.get("access_token").getAsString() : null;
}
}