La standardizzazione per la firma JSON, denominata JSON Web Signature, è stata avviata dal gruppo di lavoro JOSE dell'IETF [1].

La bozza iniziale

で す.

Il mio nome viene menzionato perché ho portato qualcosa che era stato preso in considerazione dal gruppo di lavoro AB/C della OpenID Foundation all'IETF [2].

@ritou ha detto: "Cos'è una richiesta firmata nell'era OAuth 2.0?”, ma su Facebook richiesta firmata molto simile a

La grande differenza è che Signed_Request lo è

Firma

Al contrario, in JWS,

intestazione.corpo.firma

È diventato. C'è una ragione per questo.

Perché "Intestazione.Corpo.Firma"?

Qualcuno potrebbe obiettare che sarebbe meglio renderlo uguale al campione del mondo, Facebook, ma c'è una ragione logica per cui è diventato così.

Perché le intestazioni sono separate?

Nel caso di Signed_Request, il parametro Signature è incluso nel corpo. Se vuoi crittografare il corpo, non puoi adottare questo approccio. Questo perché anche i parametri per la decrittazione sono crittografati. Pertanto, è necessario separare questi parametri relativi alla crittografia nella sezione dell'intestazione.

Stiamo cercando di rendere JWS e JWE il più comuni possibile. Quindi ho dovuto separare le intestazioni.

Perché la firma è alla fine?

Un'altra grande differenza visiva è che in Signed_Request la firma è la prima, mentre in JWS la firma è l'ultima. JWS inserisce la firma alla fine per trasmettere in streaming la creazione della firma. Questo perché se provi ad aggiungere prima una firma, devi memorizzare nel buffer tutti i dati fino al termine del processo di firma, quindi inviarli come "Signature.Body". dati, quindi non è necessario bufferizzare tutti i dati ed è "facile" sulle risorse del server. Non c'è una grande differenza se firmi solo una piccola porzione di dati come Signed_Request, ma JWS può firmare anche un'enorme quantità di dati, quindi viene presa questa considerazione.

caratteristiche comuni

singed_request, JWS hanno anche alcune caratteristiche comuni. Quelli tipici lo sono

  • Nessuna normalizzazione dei dati
  • Utilizzare base64url per la serializzazione
  • Utilizza JSON come formato dati
  • Tutti i dati possono essere firmati

Nessuna normalizzazione dei dati

Esiste uno standard chiamato firma digitale XML. Molto versatile e flessibile. Tuttavia, non è stato apprezzato da molti sviluppatori a causa della sua mancanza di compatibilità tra le diverse implementazioni. La ragione principale sembra essere la normalizzazione dei dati XML. Né Signed_Request né JWS eseguono alcuna canonicalizzazione per evitare questo problema. Utilizza i dati originali così come sono.

Utilizzare base64url per la serializzazione

Spesso mi viene chiesto perché utilizzo base64url invece di base64. La risposta è che base64 contiene caratteri che non sono Web Safe, come "=". JWS può essere inserito nelle intestazioni HTTP o nei parametri GET e POST. Invece di eseguire l'escape per ogni ``=", è meglio non utilizzare il riempimento ``=".

Utilizza JSON come formato dati

Il motivo per cui viene utilizzato JSON al posto di XML è che JSON è più compatto, ha prestazioni di elaborazione migliori e soprattutto è popolare tra gli sviluppatori.

Tutti i dati possono essere firmati

Sebbene questo sia un metodo per firmare JSON, puoi firmare qualsiasi dato semplicemente inserendo i dati codificati base64url come uno dei parametri JSON.

Chi utilizza JWS?

Spero che tu capisca perché c'è una tale differenza. Tuttavia, potresti pensare: "Se non uso Facebook, qual è il punto?" Vorrei rispondere come segue.

Innanzitutto non è che Facebook abbia deciso di non utilizzarlo. Sono soddisfatti dell'attuale Signed_Request e semplicemente non sentono il bisogno di utilizzare JWS per quello scopo. Può essere utilizzato per altri scopi. Inoltre, se JWS diventasse più comune nel lungo periodo, forse Facebook potrebbe fornire ulteriore supporto in quanto è più "developer friendly"?

Inoltre, anche se Facebook non lo utilizza, ci si aspetta che molti giocatori lo utilizzino. Attualmente, questi includono Microsoft, Google, Salesforce, AOL ed eBay.

Quando dovrei rispondere?

Penso che JWS sia relativamente sofisticato. In effetti, aziende come Google ed eBay lo hanno implementato. Quindi penso che tu possa iniziare a seguirmi adesso, a patto che non ti dispiacciano alcuni cambiamenti.[3] Se hai esigenze di firma, considera l'utilizzo di JWS.

[1] Allo stesso tempo è stato avviato uno standard di crittografia chiamato JSON Web Encryption.

[2] Abbiamo deciso di standardizzarlo presso IETF perché può essere utilizzato non solo per gli standard di identità come OpenID Connect, ma anche per scopi generali. Anche JSON Web Token e Simple Web Discovery sono specifiche introdotte allo stesso modo.

[3] Nel frattempo, JWE sta per sottoporsi a un piccolo intervento chirurgico. Nello specifico, il controllo di integrità DEVE essere aggiunto quando si utilizza la modalità CBC. Quindi fino alla prossima bozza