Request Facade
Esta librería es una fachada de la librería requests que añade una abstracción de la autenticación JWT mediante
configuración en el archivo properties.ini
Propiedades
Debido a la naturaleza de la librería y que deberemos de indicar en texto claro user y password, posee una forma
de encriptar dicho contenido mediante una variable de entorno FERNET_KEY de la cual se extraerá una llave necesaria
para desencriptar usuario y password que están en el properties.ini y asi no vulnerar ningún principio de seguridad.
Existen dos grupos de propiedades:
ENDPOINT_CONFIG: Relacionado con la configuración que se encarga de saber donde encontrar el endpoint del API a
consultar para obtener la autenticación.
AUTH: Relaciona con el formato y datos que se le enviaran al endpoint de la autenticación.
base_url_api
Es el nombre o ip del host junto con su puerto de donde está localizada el API de autenticación como por ejemplo
http://127.0.0.1:5000
base_endpoint_api
Parte del endpoint que es fijo normalmente usado para marcar la versión del API y mantener una retrocompatibilidad en el largo plazo.
Ejemplo:
/v1/api que unido a la propiedad anterior tendriamos algo como http://127.0.0.1:5000/v1/api y a partir de esta
ruta se podria acceder a la version 1 de dicha api evitando asi que modificaciones futuras afecten a cosas antiguas.
endpoint_auth
Part del endpoint en concreto que se usa para la autenticacion como por ejemplo /auth o /login que mezclado con las
propiedades anteriores quedari asi http://127.0.0.1:5000/v1/api/auth
base_url_api
No se deberia de tocar es un punto de union de las tres propiedades anteriores para realizar llamadas mas simples en el código.
AUTH
Normalmente cuando enviamos los datos para la petición de auth el cuerpo de la peticion suele tener un aspecto similar
a {"username": "xxxxx", "password": "xxxxx"} pero otras veces es de este modo {"email": "xxxxx", "pass": "xxxxx"}
para controlar todas estas variantes se a dado la opcion de iniciar el nombre de las keys de los json que se envian
hacia el API de autenticación de este modo adaptarse a varios casos.
user_key
Key del parametro usado para el usuario.
Ejemplo:
{"{user_key}": "xxxxx", "password": "xxxxx"}
user_value
Valor del parametro usado para el usuario.
Ejemplo:
{"username": "{user_value}", "password": "xxxxx"}
password_key
Key del parametro usado para el password.
Ejemplo:
{"username": "xxxxx", "{password_key}": "xxxxx"}
password_value
Valor del parametro usado para el password.
Ejemplo:
{"username": "xxxxx", "password": "{password_value}"}
Configurando propiedades
Añadir que aparte de esta configuración existe una variable de entorno en el sistema llamada FERNET_KEY, dicha llave
se puede generar de cualquier forma que sea valida para la libreria de cryptography==37.0.2 en particular para la
clase
Fernet del paquete from import Fernet.
Se recomienda usar esto para generar llaves validad:
from generic_utils import CleanDevGenericUtils
utils: CleanDevGenericUtils = CleanDevGenericUtils
if __name__ == '__main__':
print(utils.get_fernet_key())
mrvhq-I67IuR_vFh3L_bG-9DqVO7WOo84vxnjQdD_qg=
Una vez tengamos dicha llave la importamos al sistema export FERNET_KEY=mrvhq-I67IuR_vFh3L_bG-9DqVO7WOo84vxnjQdD_qg=
A continuación, encriptamos el usuario y la password para la autenticacion de la siguiente forma:
from generic_utils import CleanDevGenericUtils
from requests_facade.config import FERNET_KEY
utils: CleanDevGenericUtils = CleanDevGenericUtils
if __name__ == '__main__':
username = 'admin'
password = '123456789'
print(utils.encrypt(username, FERNET_KEY))
print(utils.encrypt(password, FERNET_KEY))
gAAAAABilNDxJbYFfPDVPi64C0wA5jOsdu6O83WVNx3-Vg2BOUJ5W8EI-AKoOfindZJJN58SOxq2klRLfqTGy6failyB_GtAAg==
gAAAAABilNDxyv1pb55y8LpETyu5fBQ0AegC9z1uV8uMKIRKyZXljMVHtbJK3e4DgZvyUlI2abfqKJ9ndiV9b6cUkXAtBUZomg==
y estos son los valores que deberemos de poner en el properties.ini respectivamente.
Ejemplo de uso
Una vez configurado todas las configuraciones hacemos lo siguiente
[ENDPOINT_CONFIG]
base_url_api=http://127.0.0.1:5000
base_endpoint_api=
endpoint_auth=/auth
url_api=%(base_url_api)s%(base_endpoint_api)s
[AUTH]
user_key=email
user_value=gAAAAABikQpzO4MnZd-u5Hg2i3-kdS1FkWVPr3s5xwDxsaS-1zaOj7S_XcTOV4f4qIIzW1liJaqOc_hewjRk1Udj6DS4Vj8vrNisZBZYsI-6Nmf7RdIqn9s=
password_key=password
password_value=gAAAAABikQpzpoABdCzse9Nop6dnDfcSWsKdQiufY8Q-mMsmF2Xfu_mXMM4CI-cevurPZrB7ngjD8kuCFycV78mO2zCqADZ68A==
from requests_facade import RequestFacade
from requests import Response
if __name__ == '__main__':
req_facade: RequestFacade = RequestFacade(need_auth=True)
resp: Response = req_facade.get(url='http://127.0.0.1:5000/test/jwt')
resp: Response = req_facade.get(url='http://127.0.0.1:5000/test')
El endpoint http://127.0.0.1:5000/test/jwt esta securizado mientras que http://127.0.0.1:5000/test no lo esta como
se observa en el ejemplo no tenemos que preocuparnos de añadir el Bearer en las cabeceras ya que lo hace automaticamente.
Unicamente resta con usar el metodo req_facade.get() o req_facade.post() para realizar peticiones al API.
Metadata
Release files for cleandev-requests-facade 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| cleandev-requests-facade-0.1.5.tar.gz | 4.6 kB | Without provenance | Details for cleandev-requests-facade-0.1.5.tar.gz |
Release files / cleandev-requests-facade-0.1.5.tar.gz
| Download URL | cleandev-requests-facade-0.1.5.tar.gz |
|---|---|
| Size | 4.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5a5aea4cf75fea31db33ec099db74256da4d5b64c16d4abe64aaec79ac09775
|
|
BLAKE2b-256 checksum How to use checksums |
a4673f2949f2061e0432fc0c86c264d059bb53e38acf8831893f263f9a75c4b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.9.10
|
Security for cleandev-requests-facade 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.