En este apartado se explica cómo solicitar autorización utilizando el refresh_token, con algunos ejemplos y posibles errores.
Qué es un refresh_token?
El refresh_token o token de refresco es un token que le permitirá solicitar autorización para consumir nuestros servicios web sin tener que enviar las credenciales en el mensaje.
Es muy importante guardar este token bajo estrictas normas de seguridad, al igual que las credenciales de acceso.
Cómo obtengo uno?
Para obtener un token de refresco debemos solicitar autorización, aquí explicamos cómo hacerlo.
Solicitar autorización con refresh_token
La solicitud es muy similar a la realizada en el paso anterior, se envía un POST a la misma URL: https://a.paypertic.com/auth/realms/entidades/protocol/openid-connect/token
El cuerpo del mensaje debe también debe ser de tipo x-www-form-urlencoded y en el mismo deben ir los siguientes campos: grant_type, client_id, client_secret y agreguearemos uno nuevo, refresh_token.
Debemos completar el campo refresh_token con el valor obtenido en el paso previo y cambiar el valor de grant_type por "refresh_token".
Por ejemplo:
curl -X POST \ https://a.paypertic.com/auth/realms/entidades/protocol/openid-connect/token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=refresh_token&client_id=16465308-1844-4abe-abe6-f184149ee740&client_secret=a2d03fa3-f6c4-45e5-9792-dc0d8b51a25c&refresh_token=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJLdnB0T0R6RXdlQUp4LXZVWDc1NFJWVnFlak51NGwtTXUxUE9UbVB4Q1dBIn0.eyJqdGkiOiI1YzBjNmZiOC01NjMwLTQzZDUtYjBlMC1jNzZhNzA1ZjYxY2YiLCJleHAiOjE1NTg4MjYxMDMsIm5iZiI6MCwiaWF0IjoxNTU4ODIzMTAzLCJpc3MiOiJodHRwczovL2EucGF5cGVydGljLmNvbS9hdXRoL3JlYWxtcy9lbnRpZGFkZXMiLCJhdWQiOiIxNjQ2NTMwOC0xODQ0LTRhYmUtYWJlNi1mMTg0MTQ5ZWU3NDAiLCJzdWIiOiI0MGZlOTFkNi1mNmQ5LTRmOTMtOWZhOC05MGExYmFiMDllNmEiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiIxNjQ2NTMwOC0xODQ0LTRhYmUtYWJlNi1mMTg0MTQ5ZWU3NDAiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJlOThlNzYxNC0yMmY5LTRkZWYtYjViNi02ZWE0MTYxNGZlNzQiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbXSwicmVzb3VyY2VfYWNjZXNzIjp7IjE2NDY1MzA4LTE4NDQtNGFiZS1hYmU2LWYxODQxNDllZTc0MCI6eyJyb2xlcyI6WyJjYW5jZWwtc3Vic2NyaXB0aW9uIiwiY3JlYXRlLXN1YnNjcmlwdGlvbiIsImNyZWF0ZS1wYXltZW50IiwidW1hX3Byb3RlY3Rpb24iLCJjYW5jZWwtcGF5bWVudCIsInJldHJ5LXBheW1lbnQiLCJmaWxlLWV4cG9ydCIsImFkbWluaXN0cmF0b3IiLCJyZXF1ZXN0LXJlZnVuZCIsInVwZGF0ZS1wYXltZW50IiwiYXBpLXVzZXIiLCJiYXNlLXVzZXIiLCJ1cGRhdGUtc3Vic2NyaXB0aW9uIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbImFkbWluaXN0cmF0b3IiLCJiYXNlLXVzZXIiLCJ2aWV3LXByb2ZpbGUiXX19LCJzaWduYXR1cmUiOiI5OTkiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJlbnRpZGFkcHJ1ZWJhIiwiZW1haWwiOiJlbnRpZGFkcHJ1ZWJhQHBheXBlcnRpYy5jb20ifQ.CBZt2zsN3hk_I25d81Q1K_cW_-ZJAwdvfUy_f_RhYVrADf9G4RrqHdZ7M-gCWiML6n--5CH9jn2WsBQa9nxb1ySgUwqWCkdybph1F5mZKi0Q6xWNEhIMqqFbV3Qhi1Jyr87xRDn4tlD28vO6xbPASkjbuGdsRucPQMmbG3XrSZQlDPjOZRCqFNUxweDIxbRgpA-qOPIYPtE-OmcU_tMfSLfjtKWbi3z0SGxhqhWDMPjsL_l6PtxTXQgVZgwwSnHF_mDDxIjk_Q_PibQSSZNnLHlIaZ70qDYLC2bPOrq_j5lPU8WK3W9aYJTxqykAhts9hl_YSugchWFaXlpWiVAMxw&undefined='
Respuesta
La respuesta en este caso será igual que la recibida en la solicitud con credenciales, un código HTTP 200 con un JSON como este:
{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJLdnB0T0R6RXdlQUp4LXZVWDc1NFJWVnFlak51NGwtTXUxUE9UbVB4Q1dBIn0.eyJqdGkiOiIzMmFhMWMzMy04MTgzLTRkMjYtYWNhYS01ZjQ2MmRkYzA3MDIiLCJleHAiOjE1NTg4MjY2MzQsIm5iZiI6MCwiaWF0IjoxNTU4ODIzNjM0LCJpc3MiOiJodHRwczovL2EucGF5cGVydGljLmNvbS9hdXRoL3JlYWxtcy9lbnRpZGFkZXMiLCJhdWQiOiIxNjQ2NTMwOC0xODQ0LTRhYmUtYWJlNi1mMTg0MTQ5ZWU3NDAiLCJzdWIiOiI0MGZlOTFkNi1mNmQ5LTRmOTMtOWZhOC05MGExYmFiMDllNmEiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiIxNjQ2NTMwOC0xODQ0LTRhYmUtYWJlNi1mMTg0MTQ5ZWU3NDAiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJhMWI0N2M1MC03ZWU0LTQ0MzctOGFjYy04ZTVjZDRlZTQ1YzgiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbXSwicmVzb3VyY2VfYWNjZXNzIjp7IjE2NDY1MzA4LTE4NDQtNGFiZS1hYmU2LWYxODQxNDllZTc0MCI6eyJyb2xlcyI6WyJjYW5jZWwtc3Vic2NyaXB0aW9uIiwiY3JlYXRlLXN1YnNjcmlwdGlvbiIsImNyZWF0ZS1wYXltZW50IiwidW1hX3Byb3RlY3Rpb24iLCJjYW5jZWwtcGF5bWVudCIsInJldHJ5LXBheW1lbnQiLCJmaWxlLWV4cG9ydCIsImFkbWluaXN0cmF0b3IiLCJyZXF1ZXN0LXJlZnVuZCIsInVwZGF0ZS1wYXltZW50IiwiYXBpLXVzZXIiLCJiYXNlLXVzZXIiLCJ1cGRhdGUtc3Vic2NyaXB0aW9uIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbImFkbWluaXN0cmF0b3IiLCJiYXNlLXVzZXIiLCJ2aWV3LXByb2ZpbGUiXX19LCJzaWduYXR1cmUiOiI5OTkiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJlbnRpZGFkcHJ1ZWJhIiwiZW1haWwiOiJlbnRpZGFkcHJ1ZWJhQHBheXBlcnRpYy5jb20ifQ.c6nlTwgbxLiSWNOpTRuO4cCWJ5TyIispsfvfVoR4nczcW0841VMDmvzKJSX92lPdN5opo5zgCftb0Mm9tSpWe4QCtM-UkEP6PfrfNYCvg_GagZIPjbjgLVVuegO534htdEwdw4xStXqRqhb1A7MhKPtiyytUepE378FrHYeAxDPiZMjGDmg3CxhhWPuOVgP-k_RrXpF_fVYUWXeoeYeCYZU_c2uTChGFkyf5yzQkxuBIdNEp6avva69A4pLxQa7y87-ZL0xV0cwrJ68GPInkaw6-elVn-F4qf2gysoaJrjDN8F4qGnI167V5nW3VA8hOeMObRIXeN0Ut4kJ5hVQuJg", "expires_in": 3000, "refresh_expires_in": 1800, "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJLdnB0T0R6RXdlQUp4LXZVWDc1NFJWVnFlak51NGwtTXUxUE9UbVB4Q1dBIn0.eyJqdGkiOiJiMzFmZTI5ZC05YmI3LTQ2MTUtOTQzMS03YWNlYjllNjgzN2IiLCJleHAiOjE1NTg4MjU0MzQsIm5iZiI6MCwiaWF0IjoxNTU4ODIzNjM0LCJpc3MiOiJodHRwczovL2EucGF5cGVydGljLmNvbS9hdXRoL3JlYWxtcy9lbnRpZGFkZXMiLCJhdWQiOiIxNjQ2NTMwOC0xODQ0LTRhYmUtYWJlNi1mMTg0MTQ5ZWU3NDAiLCJzdWIiOiI0MGZlOTFkNi1mNmQ5LTRmOTMtOWZhOC05MGExYmFiMDllNmEiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoiMTY0NjUzMDgtMTg0NC00YWJlLWFiZTYtZjE4NDE0OWVlNzQwIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiYTFiNDdjNTAtN2VlNC00NDM3LThhY2MtOGU1Y2Q0ZWU0NWM4IiwicmVzb3VyY2VfYWNjZXNzIjp7IjE2NDY1MzA4LTE4NDQtNGFiZS1hYmU2LWYxODQxNDllZTc0MCI6eyJyb2xlcyI6WyJjYW5jZWwtc3Vic2NyaXB0aW9uIiwiY3JlYXRlLXN1YnNjcmlwdGlvbiIsImNyZWF0ZS1wYXltZW50IiwidW1hX3Byb3RlY3Rpb24iLCJjYW5jZWwtcGF5bWVudCIsInJldHJ5LXBheW1lbnQiLCJmaWxlLWV4cG9ydCIsImFkbWluaXN0cmF0b3IiLCJyZXF1ZXN0LXJlZnVuZCIsInVwZGF0ZS1wYXltZW50IiwiYXBpLXVzZXIiLCJiYXNlLXVzZXIiLCJ1cGRhdGUtc3Vic2NyaXB0aW9uIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbImFkbWluaXN0cmF0b3IiLCJiYXNlLXVzZXIiLCJ2aWV3LXByb2ZpbGUiXX19fQ.kwqMoqjiljCWKTRG75laf7Gzd_m7qxTMbLPtvqQdPdZrjsXeM8JAR7vR6DhjsA5mOaHYgNrJKZJafmeeeIAKEDNnp4s-6l2uD2v86SwQVzr3wC6s2-kTgt8C_Dw2j7xKGrBsYXV9nCXSO7-AFN0gY_Nn4oPxGWN8skt-9KLqMKog5BJ8Q7yLxHeHV4gYh7729tC-2sSUwHh97O3vo9Fyn_2WKG7gQfc6IS8cy4lXc6MbA1C07K5TbPhg2cG_gOj6KZ8wQHAtDpdnJ1yXFxMWiPUsUw1TvYCwA3aVIgmiyIs8qA1hkc8wDMEWNpY4hnAk5xfDQ97m8REZQQrFf3Pw4w", "token_type": "bearer", "not-before-policy": 1523907876, "session_state": "a1b47c50-7ee4-4437-8acc-8e5cd4ee45c8" }
Si recibió una respuesta similar significa que la solicitud fue exitosa y puede utilizar access_token para consumir los servicios web de Pay per TIC.
Posibles errores
{ "error": "invalid_grant", "error_description": "Invalid refresh token" }
El servicio no recibió el campo refresh_token. Verificar que el mismo haya sido enviado en la solicitud.
{ "error": "invalid_grant", "error_description": "Invalid refresh token" }
El refresh_token enviado no es válido. Verificar que el valor sea exactamente el mismo obtenido en la solicitud de autorización. En caso de persistir el problema, solicítelo nuevamente.