Tokens JWT
Si pertenecés a un organismo de la Administración Pública Nacional y querés incrementar la cuota de uso de la API de Georef, podés pedir un token y autenticarte utilizando JWT.
Para generar un token JWT, se requieren dos elementos: una key y un secret generados para el uso con la API.
Una vez obtenidos ambos elementos, se puede generar un token JWT utilizando, por ejemplo, Python o Node.js. A continuación, se muestran ejemplos utilizando los siguientes valores demostrativos:
key = YXNkc2Rhc2RmYXNkZmFzZmRhc2RmYXNksecret = dnVvODY4Yzc2bzhzNzZqOG83czY4b2Nq
El algoritmo de autentificación de mensajes con hash utilizado es HMAC-SHA256 (HS256).
Utilizando la librería pyjwt:
$ pip install pyjwt$ python>>> import jwt>>> key = 'YXNkc2Rhc2RmYXNkZmFzZmRhc2RmYXNk'>>> message = { 'iss': key }>>> secret = 'dnVvODY4Yzc2bzhzNzZqOG83czY4b2Nq'>>> token_bytes = jwt.encode(message, secret, algorithm='HS256')>>> token = token_bytes.decode()>>> token'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJZWE5rYzJSaGMyUm1ZWE5rWm1GelptUmhjMlJtWVhOayJ9.P4leoe9q_H3lmIlnpZuVFSt7ORgLhLfQ3JN_3FMexSo'Finalmente, para consumir la API de Georef, adjuntar el token generado en las cabeceras HTTP. A continuación, se muestra un ejemplo utilizando la librería requests:
>>> import requests>>> headers = { 'Authorization': 'Bearer {}'.format(token) }>>> resp = requests.get('https://apis.datos.gob.ar/georef/api/provincias', headers=headers)>>> resp.json(){ 'provincias': [ { ... } ]}Node.js
Sección titulada «Node.js»Utilizando la librería jswonwebtoken:
$ npm install jsonwebtoken$ node> var jwt = require('jsonwebtoken')> var payload = { 'iss': 'YXNkc2Rhc2RmYXNkZmFzZmRhc2RmYXNk' }> var secret = 'dnVvODY4Yzc2bzhzNzZqOG83czY4b2Nq'> var token = jwt.sign(payload, secret, { 'noTimestamp': true })> token'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJZWE5rYzJSaGMyUm1ZWE5rWm1GelptUmhjMlJtWVhOayJ9.P4leoe9q_H3lmIlnpZuVFSt7ORgLhLfQ3JN_3FMexSo'Finalmente, para consumir la API de Georef, adjuntar el token generado en las cabeceras HTTP:
> var http = require('http')> http.get({ 'hostname': 'apis.datos.gob.ar', 'path': '/georef/api/provincias', 'headers': { 'authorization': 'Bearer ' + token } }, function(response) { ... })