2011-11-22 14 views
5

Stiamo costruendo un servizio Web con WCF su .net 4.0. Il servizio verrà utilizzato principalmente da un frontend ASPC MVC, ma verrà utilizzato anche da un'app .net Windows.La migliore strategia per passare un token/cookie a un servizio WCF?

Il nome utente/password di base fornito non funzionerà dato che non vogliamo salvare le credenziali dell'utente, quindi stavo pensando di autenticare una volta e creare un semplice token (o dovrei chiamarlo un cookie?) Con RNGCryptoServiceProvider .GetBytes() e quindi usando quello per autenticare ulteriori richieste.

Ho esaminato i vari metodi comuni per fare sicurezza con WCF e sembrano per lo più eccessivamente complessi, specialmente quando tutto ciò che vogliamo è essenzialmente passare un cookie ad ogni chiamata di metodo.

Quale sarebbe la migliore strategia per passare questo cookie da un client WCF ai nostri servizi WCF? Il metodo preferito sarebbe il più strettamente possibile con l'architettura di sicurezza di WCF.

Finora mi sono appoggiato a entrambi utilizzando custom HTTP headers o custom authorization ma non sono convinto quale sia il metodo più appropriato, se presente.

Ricordare che per il sito Web ASP, verrà creato un nuovo canale per ogni richiesta, mentre verrà riutilizzato nell'app Windows.

+1

Questo non ha nulla a che fare con C, sto rimuovendo il tag. –

+0

@JoachimPileborg L'ho solo etichettato come C# per indicare la mia preferenza per qualsiasi campione di codice ricevuto. Dovrei specificare questo nella descrizione invece? –

+0

Per errore hai taggato C, non C#. Puoi aggiungere il tag se vuoi. –

risposta

3

IMO ci sono due modi per fare sicurezza wcf, trasporto o messaggistica.

È possibile implementare l'autenticazione del tipo di nome utente nella propria applicazione. Quindi il lato client dovrebbe inserire un nome utente e una password per inviare un messaggio. così il legame sul lato client sarebbe simile

<security mode="TransportWithMessageCredential"> 
    <message clientCredentialType="UserName"/> 
</security> 

Sul lato server è possibile implementare il proprio validatore della password, come mostrato in questo example

fare questo sarebbe autenticare il messaggio sul server, può implementare qualsiasi logica tu voglia per la convalida della tua password. usando questo il tuo messaggio verrebbe crittografato usando ssl e autenticato usando la tua logica implementata sul lato del servizio.

+0

Questo è davvero quello che stavo cercando, ma sono un po 'preoccupato per il calo delle prestazioni che potrei subire a causa della creazione di nuovi canali per ogni richiesta in arrivo. Qualche idea su questo? –

+1

Non penso che affronterai problemi di prestazioni a causa della creazione di nuovi canali WCF è abbastanza capace di prendersene cura nella maggior parte degli scenari –

Problemi correlati