2009-07-08 6 views
6

Sto cercando alcune indicazioni sul modo migliore per autenticarsi sul mio WebService. In questo momento, ho un WebService standard su .NET 3.5 e un sito Web MVC che si trova in cima a questo WebService.Utilizzo di OpenID con un WebService: il modo migliore per autenticarsi?

Il sito Web MVC utilizza OpenID per autenticare gli utenti e, durante la fase di sviluppo, abbiamo semplicemente passato l'identificatore di richiesta OpenID dell'utente al servizio Web per l'autenticazione. Ovviamente questo non è ciò che rilasceremo al cliente quando andremo a vivere.

Quindi la mia domanda è questa: Qual è il modo migliore per autenticarsi sul WebService?

Alcune delle API con cui ho giocato utilizzano i token di autenticazione. Un'altra idea che avevamo era, dopo la connessione al WebService, passare al client una chiave di crittografia che potevano usare per tutti i trasferimenti.

Sto pensando ad alta voce qui, e ancora, qualsiasi aiuto è molto apprezzato! Grazie!

...

UPDATE: In questo momento ho creato un SoapAuthenticationHeader personalizzato, che ha una proprietà OpenIdURL. Viene utilizzato su tutte le chiamate di servizio per autenticare l'utente. Il problema è duplice:

  1. Se un hacker conosce l'OpenIdURL di un utente, può facilmente accedere al WebService.
  2. L'OpenIdURL è attualmente passato in testo normale.

così ho potuto passare una chiave di crittografia al cliente al momento della connessione al servizio Web, e il client crittografare i OpenIdURL nell'intestazione SoapAuthentication. Ma io non sono sicuro di come fare meglio di questo ...

+0

Quando si dice "servizio web standard" vuoi dire un servizio ASMX eredità, o stai usando WCF? –

+0

Questo è vicino a ciò che non vedo l'ora, ma sarebbe bello se qualcuno potesse spiegarlo un po 'oltre. http://stackoverflow.com/questions/544388/openid-authentication-and-api-access –

+0

Sto usando un ASMX WebService standard e MVC accede al WebService come riferimento di servizio (che penso sia un WCF wrapper?). –

risposta

3

Si potrebbe voler dare un'occhiata a OAuth:

http://oauth.net/

(Usa http://oauth.net/code/ per la codifica.)

Come è orientato specificamente per questo scenario (Open ID non lo è, davvero).

C'è un'altra domanda su SA, che chiede circa il modo migliore per garantire un servizio web, e Open ID e OAuth sono entrambi discussi:

Web Service Authentication using OpenID

+0

Quando dici "questo scenario", a quale ti riferisci? Servizi ASMX? –

+0

Grazie, questo mi ha indirizzato nella giusta direzione. Voglio vedere ciò che il resto della comunità deve condividere, prima di contrassegnare questo come una risposta. Anche se non penso di aver bisogno di tutte le funzionalità che OAuth ha da offrire, la pagina del workflow del protocollo offre alcune informazioni importanti sui token di richiesta e sui token di accesso. –

+0

@John Saunders: Mi riferisco a Open ID vs OAuth, non realmente ASMX vs WS- * servizi web. Open ID non è pensato per l'uso con API, mentre OAuth lo è. – casperOne

0

servizi web ASMX (che Microsoft ora considera come "legacy") non ha la possibilità di utilizzare OpenID per l'autenticazione. Possono solo utilizzare ciò che IIS fornisce loro. Potresti aggiungere un SoapExtension che farebbe l'autenticazione OpenID per loro, ma non passerei il tempo lì.

Non so abbastanza su OpenID per essere sicuro, ma ho il sospetto che possa integrarsi con WCF attraverso la sicurezza federata. Sono sicuro che qualcun altro risponderà con i dettagli al riguardo.

+0

Le mie scuse. In questo momento ho creato un SoapAuthenticationHeader personalizzato che ha una proprietà OpenIdURL. Viene utilizzato su tutte le chiamate di servizio per autenticare l'utente. –

+0

Potresti aggiornare la tua domanda con quella informazione? In particolare, se hai questa intestazione, che cosa stai cercando di più? –

+0

Cosa, "legacy"? Oh, Microsft ... I servizi Web ASMX sono fantastici! :) –

0

Questo non è davvero una risposta, ma non posso lasciare commenti ...

si dice "Ho un servizio Web standard su .NET 3.5, e un sito web MVC che si trova in cima a questo WebService ".

Qui potrei trovare una via d'uscita, ma il linguaggio implica che questi due si siedono sullo stesso server. In tal caso, perché non puoi semplicemente condividere il database degli utenti e il token dei cookie?

James

+0

Questi possono o non possono sedere sullo stesso server. Ci saranno casi in cui entrambi accadranno. –

Problemi correlati