Es posible requerir la autenticación para el uso de una aplicación. Mediante el panel “KONG API PLUGIN JWTS” podemos activar este mecanismo. Al activar este plugin, la aplicación intentara autenticar usuario por API, y se los identificara como kong consumers.
Si la opción Free tier esta activa, los usuarios sin token lograran acceder a la API pero identificados como un consumer anonimo (a.k.a. “anonymous consumer”). En caso contrario a los usuario sin token no se les permitirá el accedo a la API.
Para dar de alta un nuevo kong consumer es necesario crear un nuevo Token requests. Una vez creado, debemos aceptarlo mediante seleccionarlo en la pagina de listado de “token requests” y usando la acción ACCEPT.
Esto nos creara un nuevo Kong Consumer.
En el nuevo kong consumer podemos ver una sección “JWT CREDENTIALS”. La misma contiene el par key/secret para las llamada que el cliente necesita hacer.
Suponiendo que las claves son bOgu3TainXFFOgLi2Q27EE7BRtXIBqdD
y lR39z3kcMNAHc44NzOgj9CENWndMLYWQ
respectivamente,
podríamos usar el debugger de https://jwt.io/ o https://github.com/jpadilla/pyjwt para generar el token.
Al usar https://jwt.io nuestro payload debe lucir (haciendo uso de la “key”):
{
"iss": "bOgu3TainXFFOgLi2Q27EE7BRtXIBqdD"
}
y en VERIFY SIGNATURE ponemos el “secret”.
Al usar pyjwt
podemos generarlo por línea de comando:
pyjwt --key=lR39z3kcMNAHc44NzOgj9CENWndMLYWQ encode iss=bOgu3TainXFFOgLi2Q27EE7BRtXIBqdD
# => eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJiT2d1M1RhaW5YRkZPZ0xpMlEyN0VFN0JSdFhJQnFkRCJ9.hxyvLkUYmrlonrFUoQ_Il1Y7RcJXYV5DERHBzR7paa0
Luego al usar nuestra aplicación, debemos agregar el “header” Authorization:
url=http://localhost:8000/series/api/series/?ids=1.1_OGP_D_1993_A_17
token="$(pyjwt --key=lR39z3kcMNAHc44NzOgj9CENWndMLYWQ encode iss=bOgu3TainXFFOgLi2Q27EE7BRtXIBqdD)"
curl "$url" -H "Authorization: Bearer $token";
Para APIs protegidas bajo autenticación (es decir, con el plugin JWT activado), es necesario crear consumidores de APIs. Estos consumers tendrán asociados un token JWT que, a través de headers HTTP, podrán ser usados para autenticarse contra el backend.
Una opción para registrar consumidores es a través de token requests, y luego aceptándose.
Otra opción es crear consumidores directamente, instanciando nuevos modelos de Kong Consumers en el API Registry.
Luego de cualquiera de estos dos pasos, el token JWT de la API asociado al usuario se encuentra bajo el modelo Kong Consumer creado por cualquiera de las dos acciones (en /management/ingresar/api_registry/kongconsumer/
)
Un consumer está identificado por su dirección de correo electrónico y la API a la cual se asocia el JWT. No es posible crear tokens adicionales para esa combinación de usuario + API, ni usar el token generado para otras APIs.
api: La api a la cual el consumer creado se subscribe.
applicant: Nombre de solicitante, se usa para identificarlo.
contact email: Email de contacto con el solicitante,
solo para uso administrativo.
consumer application: Nombre de la aplicación que consume
la api en solicitud, sólo para uso administrativo.
requests per day: Cantidad de requests estimados a la api por dia,
solo para uso administrativo.
state: Estado del token request (Aceptada
| Rechazada
| Pendiente
).
Como cliente de la app, si quiero obtener un token para una api con
autenticación por JWT, tengo que realizar una
peticion en la landing de dicha api, sea /georef/
/series/
Cómo admin puedo generar el token request desde el admin de api-mgmt.
Los tokens requests se aceptan o rechazan a traves de acciones de django, en el admin.