Servizio di autenticazione che utilizza WCF

Ho un MembershipProvider personalizzato come mostrato di seguito. Convalida nome utente e password contro Active Directory. Mi piacerebbe rendere questo come un “servizio di autenticazione”. Questo dovrebbe funzionare anche se il client utilizza l’autenticazione basata su form o Windows.

C’è un “Servizio Risorse Umane” della WCF che fornisce informazioni sui dipendenti. Il sito Web “HR UI” utilizza il servizio WCF “Servizio risorse umane”. Ora dobbiamo assicurarci che tutti i client che utilizzano il “Servizio Risorse umane” debbano essere autenticati utilizzando “servizio di autenticazione” prima di accedere all’operazione “Servizio risorse umane”. Se l’applicazione client viene autenticata una volta, la volta successiva non dovrebbe essere nuovamente convalidata (fino alla chiusura dell’applicazione). Quando viene aperta una nuova istanza dell’applicazione client, è necessario autenticarsi dall’inizio.

Come lo otteniamo? Disponiamo di esempi di codice per la dimostrazione del stream end-to-end?

Nota: dovrei essere in grado di testarlo utilizzando servizi self- service.

Nota: il client può essere di qualsiasi piattaforma (ad es. Java).

    namespace LijosCustomValidation { public sealed class LijoMembershipProvider : MembershipProvider { public override bool ValidateUser(string username, string password) { bool isValid = true; //my logic to validate the user name and password return isValid; } //other implementations of Abstract Methods from MembershipProvider } 

    Il tuo servizio di autenticazione dovrebbe restituire un token se l’autenticazione ha esito positivo. Questo token a sua volta dovrebbe quindi essere presentato al servizio risorse umane.

    Hai un paio di opzioni su ciò che fa il servizio risorse umane a questo punto. Può conoscere il segreto per convalidare il token oppure deve chiamare il servizio auth per convalidare il token.

    Il token dovrebbe essere un valore che può essere convalidato se si conosce il segreto, quindi potrebbe qualcosa, ad esempio l’id dell’utente, che è simmetricamente crittografato. Idealmente dovrebbe contenere un componente temporale per impedire attacchi di riproduzione.

    Suggerirei qualcosa di simile

     || 

    Il valore hash dovrebbe essere hash (sha1, md5, ecc.) Di tutto dopo la prima pipe. È quindi ansible codificare in base64 il risultato e passarlo in giro. La convalida del token potrebbe quindi verificare che la data di emissione fosse entro un certo periodo di tempo.

    Hai anche la possibilità di archiviare il token nel client in un cookie e passare come cookie ai servizi o renderlo un parametro sui tuoi servizi. Potrebbero esserci altre opzioni, a seconda dell’architettura del cliente e del modo in cui si desidera strutturare i propri servizi.