Sto lavorando a un "proof of concept" di un servizio di autenticazione centrale (non CAS). Ci sono dei buchi nella mia comprensione di ciò che devo fare, e temo che il "protocollo" non sia sicuro.
Perché / Cosa
Gli utenti devono atterrare su un server di autenticazione centrale che esegue verifica, creazione e modifica delle credenziali. Una volta verificato, l'utente verrà autenticato per il sottodominio corretto e nessun altro. Per esempio. Client Foo ha diversi dipendenti. I dipendenti si collegano tutti tramite il server centrale e vengono quindi inviati al sottodominio di Foo. I sottodomini servono per isolare i client di grandi dimensioni e per il bilanciamento del carico approssimativo.
Come
Funziona in questo modo:
- L'utente atterra su
https://www.example.com/login
- L'utente fornisce nome utente, password e sottodominio (ad esempio,
foo
) - il servizio di autenticazione centrale verifica le credenziali
- La risposta contiene
sig
(e un timestamp ??) - L'utente costruisce una richiesta
POST
ahttps://foo.example.com/login
con i dati rilevanti, descritta in seguito.
Firma
dove sig
è costruito in questo modo:
The document to be signed is user's ID and a timestamp in
yyyyMMddHHmmss
format joined with a comma. For example, for ID 55555 and timestamp 20140620132430, the document string is55555,20140620132430
.
Il server centrale firma i documenti con la sua chiave privata. Ogni sottodominio ha la chiave pubblica corrispondente in modo che possano verificare che il firmatario sia il server centrale.
POST
dati
I dati rilevanti trasmessi al servizio di accesso (o auth ??) del sottodominio sarebbero:
- ID utente
- timestamp per il tempo di generazione della richiesta. Verificato dal ricevitore per essere aggiornato.
- Sito (sottodominio)
-
sig
(codificato in base64 - non è sicuro il motivo per cui ciò è importante ...).
Non mi è chiaro che il client / utente è quello che costruisce il POST
nel sottodominio. Il server di autenticazione centrale avrebbe ovviamente tutti i dati rilevanti da inviare al sottodominio e potrebbe costruire il POST
stesso. Quindi devo gestire come ottenere all'utente il sottodominio corretto con il token o cookie corretto o qualcosa del genere.
Domande
-
Questo equivale a "rolling my own" auth protocol?
-
Un protocollo standard esistente copre il mio caso d'uso?
-
Cosa c'è di sbagliato in quanto sopra? Continuo a pensare che sia tutto sbagliato --- che è una risposta potenzialmente cattiva alla domanda sbagliata; che dovremmo ripensare a cosa stiamo cercando di usare i sottodomini per.
-
Se l'idea di base è valida, mi manca qualcosa? Oppure qualcos'altro ha bisogno di chiarimenti?