Il nostro cliente vorrebbe che usassimo ADFS 2012 R2 (alias 3.0) come mezzo principale per due funzioni di sicurezza nelle app interne che stiamo costruendo:
- L'app web (ci sono due .NET e Angular) e un'app iOS useranno il flusso OAUTH all'interno di ADFS
- Al completamento del flusso di token, il JWT creato da ADFS verrà passato a un'API RESTful che viene creata con Spring
- L'API Spring dovrà quindi convalidare il JWT prima di consentire alla chiamata di procedere
L'uso di ADFS per il flusso di OAUTH è nuovo per noi e alcune domande sono apparse. Abbiamo setacciato gli Internets in cerca di risposte. Molti di loro sono focalizzati sulla fornitura di una soluzione utilizzando MS solo tecnologia (API ADAL, .NET / C #, OWIN, Katana). Pertanto, speravamo di far affluire una risposta via SE. Qualsiasi aiuto è molto apprezzato.
A questo punto, siamo stati in grado di:
- Registrare un client OAUTH con il comando PowerShell in ADFS
- Registra una risorsa "falsa" come parte ricorrente in ADFS
- Imposta i nostri client per effettuare una chiamata ad ADFS per autorizzare e ottenere il JWT restituito
Questo collegamento è stato molto utile per spiegare la configurazione:
Ora, dobbiamo inserire il codice nell'API di Spring per verificare il JWT.
In tutti gli esempi di flusso OAUTH, esiste un segreto condiviso tra l'emittente e il cliente. Questo segreto viene utilizzato per verificare che il JWT non sia stato falsificato.
Nel setup che abbiamo fatto finora in ADFS, non esiste una definizione di chiave segreta o segreto condiviso. Possiamo prendere il JWT dall'intestazione dell'autorizzazione e decodificarlo. Ma sembra che non abbiamo mezzi per verificare la firma.
La domanda è: come convalidare il JWT all'interno dell'API Spring (passato dal client tramite l'intestazione) che ritorna da ADFS senza avere il "segreto" che è stato usato per costruire la firma?
Le nostre opzioni se non lo facciamo funzionare sono:
- Utilizza Oracle Identity Manager / Access Manager (già in-house)
- Porta WSO2 Identity Manager nell'immagine