1. Introducción
Tengo que conseguir un "token" que me servira para consumir la REST api para un aplicación que estoy intentando integrar con otra.
Para ello me suministran:
1. la URL a la cual llamar (por ejemplo ficticiamente:
https://empresaauthorization.es/identity/connect/token
2. Usuario y contraseña como parámetros:
Parametro: "username" valor: "miUsuario"
Parametro: "password" valor: "miClave"
3. Otros parametros adicionales
Parametro: "grant_type" valor: "password"
Parametro: "scope" valor: "miAplicacion"
Parametro: "client_id" valor: "yoMismo"
Parametro: "client_secret" valor: "AH0124EF5832HA321"
2. Llamadas
Con "curl" se haría así:
curl -X POST --data "username=miUsuario&password=miClave&grant_type=password&scope=miAplicacion&client_id=yoMismo&client_secret=AH0124EF5832HA321" -k https://empresaauthorization.es/identity/connect/token
En cambio en Java he creado este módulo que me ha hecho penar:
En gradle le he dado esta dependencia
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
package ph.utils; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpXimo { private CloseableHttpClient httpclient = null; private String url = null; public HttpEdu(String url) { this.url = url; try { httpclient = HttpClients.createDefault(); } catch (Exception e) { e.printStackTrace(); } } public String post(String[] paramNames, String[] paramValues) throws Exception { HttpPost httpPost = new HttpPost(this.url); List<NameValuePair> nvps = new ArrayList<>(); //Add form parameters for (int i = 0; i < paramNames.length; i++) nvps.add(new BasicNameValuePair(paramNames[i], paramValues[i])); //Encode url httpPost.setEntity(new UrlEncodedFormEntity(nvps)); //Get response CloseableHttpResponse response2 = httpclient.execute(httpPost); HttpEntity entity2 = response2.getEntity(); //Read the response from input stream InputStream in = entity2.getContent(); String s = new String(in.readAllBytes()); //Close input stream EntityUtils.consume(entity2); return s; } public static void main(String[] args) throws Exception { HttpXimo myHttp = new HttpEdu("https://empresaauthorization.es/identity/connect/token"); String[] names = { "username", "password", "grant_type", "scope", "client_id", "client_secret" }; String[] values = { "Parametro", "miClave", "password", "miAplicacion", "yoMismo", "AH0124EF5832HA321" }; System.out.println("HOLA=" + myHttp.post(names, values)); }
Y la respuesta que obtenemos es esta (en formato JSON)
{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjF6ZTUxZnlxcFFZVkJVaTJlMzVTRmVxX0J0byIsImtpZCI6IjF6ZTUxZnlxcFFZVkJVaTJlMzVTRmVxX0J0byJ9.eyJjbGllbnRfaWQiOiJJbnRlcnB1YmxpY2EiLCJzY29wZSI6IkludGVycHVibGljYSIsInN1YiI6IjMzOTBlYjAyLTRiM2ItNDVmMy1iMzk3LWEzMDhmOWQ2YTNlNCIsImFbciI6WyJwYXNzd29yZCJdLCJhdvRoX3RpbWUiOjE2NTI0MjIxMjgsImlkcCI6Imlkc3J2IiwicHJlZmVycmVkX3VzZXJuYW1lIjoiVGF2ZXJuZXNWYWxsZGlnbmFTZWRpIiwiZW1haWwiOiJub0Buby5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOiJ0cnVlIiwiVXN1YXJpbyI6IjM0MyIsIlNlcnZpZG9yIjoiMiIsIkRvbWluaW8iOiI0IiwiRW50aWRhZCI6IjM0MyIsInJvbGUiOlsiRG9tYWluIiwiSW50ZXJwdWJsaWNhIiwiUGFkcm9uIl0sImp0aSI6ImQxNzNiZTY5ZGRjOWUxMDYyNDkzZjZlYzNiMDgxMWIzIiwiaXNzIjoiaHR0cHM6Ly9pbnRlcnB1YmxpY2FhdXRob3JpemF0aW9uLmRpdmFsLmVzL2lkZW50aXR5IiwiYXVkIjoiaHR0cHM6Ly9pbnRlcnB1YmxpY2FhdXRob3JpemF0aW9uLmRpdmFsLmVzL2lkZW50aXR5L3Jlc291cmNlcyIsImV4cCI6MTY1MjQyNTcyOCwibmJmIjoxNjUyNDIyMTI4fQ.ewb85x5PDL6gGvhdeZUlhn15DfGfZ4TgeTB7nY5RvAmUF0tFUs-gG38cZ5LcF87yVALlPzB8gwKMbVHfXVseO2cXpiQTxlF4xLF006aDXT1zN9bTIcFb55BUyDFeJmQyzW_euUi8KX0kKDK3XCkS01LvK_7NGIGeL_M78m7_4LumqnurWUAv2JEApIBZkBFXZ_zREk1LzJt1Pqlt6muTcS8XEZsLXK8EoTNjWkkHZzU0VdXArwSy-RKQRm3HbOr43eV96eMAKudoY8nbAeeqzsS5_qLk7soNUihwlvoM9A-EdjDsySFf_KxTtWAyemkdoE5PRPTAwmXoYPBuwKOwdw","expires_in":3600,"token_type":"Bearer"}
Para leer la respuesta se añade este código sustituyendo al método "main"
public String getKeyValue(String jsonString, String key) throws JsonMappingException, JsonProcessingException { ObjectMapper objMapper= new ObjectMapper(); Map<String,String>mp=new HashMap<>(); mp=objMapper.readValue(jsonString, mp.getClass()); return mp.get(key); } public static void main(String[] args) throws Exception {HttpXimo myHttp = new HttpEdu("https://interpublicaauthorization.dival.es/identity/connect/token"); String[] names = { "username", "password", "grant_type", "scope", "client_id", "client_secret" }; String[] values = { "Parametro", "miClave", "password", "miAplicacion", "yoMismo", "AH0124EF5832HA321" };String strResponse= myHttp.post(names, values); System.out.println(strResponse); String token =myHttp.getKeyValue(strResponse, "access_token"); System.out.println(token); }
Ahora ya tenemos el token, vamos a por la segunda parte que consiste en utilizar este token para usar la REST API
No hay comentarios :
Publicar un comentario