10 novembre 2024

Python: API Client con JWT

 Vorrei attaccarmi ad un servizio web che offre una API per fare cose, e conosco un po' di Python.

Le istruzioni dell'API dicono che posso collegarmi in maniera sicura utilizzando JWT e chiavi RSA.

Dove cominciare?

Chiavi crittografiche

scambio di chiavi:
L'articolo in inglese spiega bene con le immagini a colori, meglio dell'articolo italiano che è più orientato alla matematica.

In realtà la API in questione non usa lo scambio DH, ma RSA

generazione coppia di chiavi RSA:

Su Windows un modo semplice e grafico viene fornito dal tool PuttyGen (https://www.putty.org/)

Python

Esempio JWT: 
  • https://github.com/auth0-blog/jwts-in-python
libreria per JWT: pip install pyjwt

Sommando le cose...

 per autenticarsi usiamo
1. credenziali, user+pwd
2. eventualmente una API key, disponibile dal sito, per utenti con credenziali,
3. chiavi RSA.

con questi pezzi, ad ogni richiesta dobbiamo confezionare un JWT da accompagnare alla richiesta, per dimostrare che siamo proprio noi  

Fonti e ulteriori approfondimenti

  • https://auth0.com/blog/how-to-handle-jwt-in-python/

Appunti digitali - Obsidian e Fossil

Condivido un paio di progetti di cui sono venuto a conoscenza recentemente nella mia ricerca di sistemi di pubblicazione di appunti digitali e/o siti statici per la raccolta di informazioni.

Ovviamente, se state leggendo questo blog, sapete che sto usando (2024) Blogger di Google.

In ufficio ho usato, internamente, OneNote di Microsoft, che trovo uno dei migliori programmi mai prodotti da questa azienda. OneNote richiede di installare una App, utilizza un formato proprietario, per un periodo non era disponibile per Mac, e richiede una licenza per poter scrivere.

Ho cercato di sostituire OneNote con BookStackApp, che è gratuito e self-hosted, multilingue, e semplice anche per i meno tecnici. Purtroppo ha un limite sul meccanismo di autenticazione che lo rende un po' inflessibile. La configurazione di Apache con reverse proxy non è banale.

Da quasi dieci anni, per un progetto di pubblicazione di libri digitali, (un sito statico, molto statico :-)) utilizzo GitHub Pages + Jekyll, che è robusto, personalizzabile e abbastanza semplice da gestire, anche se non mi sono mai addentrato nel basso livello tecnico.

Obsidian

Un collega mi ha mostrato la sua tecnica per prendere appunti dei corsi di ingegneria, utilizzando Obsidian + plugin per LaTeX. La sua dimostrazione mi ha lasciato a bocca aperta: vedere serie di Fourier, matrici, integrali, vettori e formule matematiche scritte in frazioni di secondo usando markdown + scorciatoie da tastiera è stato impressionante. Il prodotto finale, esportato in PDF, era degno di un libro di testo.

Obsidian offre l'opzione di pubblicare un proprio sito di appunti a 8 €/mese sui loro sistemi, criptato. Niente male, sarà una delle opzioni che prenderò in considerazione, vista la quantità di plugin e stili grafici disponibili.

Fossil

Altra opzione, proposta da LeonardVanDerbilt su Reddit, è Fossil, un sistema di gestione della configurazione di sistema, che comprende un wiki, oltre a sistemi di versionamento, gestione progetto, e molto altro. Da provare!