Tiempo aproximado de lectura: 00:05:00 min
Duda
Cual es el proceso para la obtención de TOKEN para api REST?
Ambiente
FRAMEWORK - Framework (Línea Protheus) MI - Todas las versiones 12
Solución
Para mejorar la seguridad del servicio web estándar REST de protheus, el modelo de autenticación a través del token de acceso, también conocido como token portador, está disponible.
La obtención de este token de acceso se realiza a través de una solicitud a una interfaz de programación de aplicaciones (API) específica.
Hay una configuración* que define si necesita autenticar al usuario para tener acceso a las API y, si dicha autenticación está habilitada, debe usar una de las plantillas de autenticación.
El modelo de autenticación más simple disponible se conoce como autenticación básica, pero no se puede considerar seguro porque trafica en cada solicitud, el usuario y la contraseña que se autentica. Para evitar que el usuario y la contraseña sean traficados en el encabezado de cada solicitud REST, puede optar por esta nueva plantilla propuesta.
* Más detalles sobre las plantillas de configuración y autenticación disponibles en el enlace: https://tdn.totvs.com.br/pages/viewpage.action?pageId=75268866
El endpoint /token
Debido al tráfico de usuarios y contraseñas a este punto final, es uno servido al que recomendamos encarecidamente que se acceda mediante el protocolo seguro https. Si se utiliza sin usar SSL, se imprime un mensaje en la consola del servidor para cada solicitud que se responde.
Sus parámetros se trafican a través de encabezados http como ejemplo a continuación:
POST /api/oauth2/v1/token Host exemplo: https://localhost:8080/rest Query Params: ?grant_type=password Headers password : senha do usuario username : usuario do sistema |
Parámetro |
Valor |
grant_type |
contraseña |
contraseña |
Contraseña de usuario |
nombre de usuario |
Usuario para autenticación |
Respuesta de solicitud
Si las credenciales son válidas, la respuesta se devuelve en el siguiente formato:
{ "access_token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJUT1RWUy1BRFZQTC1GV0pXVCIsInN1YiI6Im1hcmlvIiwiaWF0IjoxNTUzMDIyMjYwLCJleHAiOjE1NTMwMjU4NjAsInJlc3RyaWN0ZWR0byI6WyJhcGkvcHJvdGhldXMvIiwiYXBpL2ZyYW1ld29yay8iXX0.jgvejFxPYDchLtj04r7mizRZCerb7xFXhB8Ihk+kFqg=" , "refresh_token" : "YEv3dtFbNCisITD3yDtKi5/x.T0jkPv12SWK/JjWS0xI01YbIXWM10KWw2ehCxG9yRVkXCiItBYN57Rizh4OH67m7H3-Jd-3ruC4/pBAWBkXVO251HPiS91KAh7FfbZqWaiDPmvYBvoiaP4KRR1gYcvCr9ES7wC3iRA2wQrQvODlH7b3FCTmvHzCVmRMi4eApgy4iOGVpBK7-ryI=.fD77MI4MBk1rW6eBjMq9EutN1ZIC1YKKuKqdEhbLf/k=" , "scope" : "default" , "token_type" : "Bearer" , "expires_in" : 3600 } |
Acceso a las API de REST
Luego, en manos de la access_token, simplemente realice la solicitud a la API deseada incluyendo en el encabezado del parámetro Authorization el valor Bearer más el token de acceso.
Se pueden obtener más detalles en el http://tdn.totvs.com.br/pages/viewpage.action?pageId=465386127
Actualización del token
Después de que caduque el token de acceso, al intentar solicitar una API protegida, se devolverá el estado 401 de no autorizado, como si no se hubiera enviado un token de acceso.
Es entonces el momento de solicitar la misma API de token la actualización como se muestra en el siguiente ejemplo:
POST /api/oauth2/v1/token Host exemplo: https://localhost:8080/rest Query Params: ?grant_type=refresh_token&refresh_token=YEv3dtFbNCisITD3yDtKi5/x.T0jkPv12SWK/JjWS0xI01YbIXWM10KWw2ehCxG9yRVkXCiItBYN57Rizh4OH67m7H3-Jd-3ruC4/pBAWBkXVO251HPiS91KAh7FfbZqWaiDPmvYBvoiaP4KRR1gYcvCr9ES7wC3iRA2wQrQvODlH7b3FCTmvHzCVmRMi4eApgy4iOGVpBK7-ryI=.fD77MI4MBk1rW6eBjMq9EutN1ZIC1YKKuKqdEhbLf/k= |
Parámetro |
Valor |
grant_type |
refresh_token |
refresh_token |
Actualizar token |
Respuesta de solicitud
Si el token de actualización es válido, la respuesta se devuelve en el mismo formato anterior y este ciclo puede repetirse varias veces siempre que no se supere el tiempo de caducidad:
{ "access_token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJUT1RWUy1BRFZQTC1GV0pXVCIsInN1YiI6Im1hcmlvIiwiaWF0IjoxNTUzMDIyOTQ0LCJleHAiOjE1NTMwMjY1NDQsInJlc3RyaWN0ZWR0byI6WyJhcGkvcHJvdGhldXMvIiwiYXBpL2ZyYW1ld29yay8iXX0.XsS38RdeJIetwh6Zq2DLQs0PhyLSRxCxOnCgp4SaoeY=" , "refresh_token" : "YEv3dtFbNCisMST1yztKi5/x.T0jkPv12SWK/JjWS0xI01YbIXWM10KWw2ehCxG9yRVkXCiItBYN57Rizh4OH67m7H3-Jd-3ruC4/pBAWBkXVO251HPiS91KAh7FfbZqWaiDPmvYBvoiaP4KRR1hUct67vFah2VLUSymyfLQtOjltqqzVPkqZMBaVtyVl4c4pxTw4IQtpHw==.tIUbpKC8sWcB6oIMhXcbOhq/bveF216m9gmboBrxJ7U=" , "scope" : "default" , "token_type" : "Bearer" , "expires_in" : 3600 } |
Disponible a partir de la versión LIB 20210517
0 Comentarios