Ho un sacco di applicazioni, in cui gli utenti devono effettuare il login. Non tutti possono essere un utente, ogni utente deve essere approvato da un amministratore. L'autenticazione dovrebbe essere una soluzione SSO, in cui gli account utente vengono creati e gestiti in un'applicazione centrale.
La mia idea è di usare OpenID. L'applicazione centrale funge da OpenID-Provider per tutte le altre applicazioni. Ma naturalmente, solo utenti da quel singolo OpenID-Provider dovrebbero essere in grado di accedere al sistema, altri OpenID-Provider devono essere ignorati. Quindi la domanda è:
In che modo una parte relying può assicurarsi che un utente abbia effettivamente un account su un determinato provider OpenID, supponendo che OpenID-Provider sia affidabile per l'applicazione?
Alcune ipotesi che possono essere fatte:
- Gli identificatori degli utenti sono tutti gli https-URL che puntano a OpenID-Provider, che risponde negativamente alle richieste di discovery di account sconosciuti.
- Tutte le connessioni alle applicazioni e il provider OpenID sono protetti da HTTPS (HTTP verrà reindirizzato).
La mia idea è di controllare semplicemente l'identificatore quando si verifica un tentativo di accesso e assicurarsi che si tratti di un URL per quel singolo provider di OpenID attendibile. Poiché OpenID include il passo di scoperta, che è sempre eseguito, il relying party invierà una richiesta al server OpenID attendibile, che risponderà con le informazioni di individuazione se l'utente esiste, o un errore, che lascia scoperta e quindi fallisce l'autenticazione.
Poiché tutto passa attraverso HTTPS, il relying party può anche essere sicuro che la richiesta all'URL identità vada effettivamente al server corretto.
Il mio approccio funziona? O qualcuno conosce un modo migliore per limitare i fornitori accettati?