2011-10-12 5 views
11

Vorrei autenticare gli utenti dei miei servizi di assistenza servicestack.net utilizzando l'autenticazione di base su HTTPS.Come posso implementare la chiamata di riposo di ServiceStack.net su HTTPS?

Qualcuno può spiegare come funzionerebbe la porzione di https o indicarmi la giusta direzione? È responsabilità del cliente assicurarsi che le chiamate siano effettuate su https? Devo fare qualcosa che coinvolga certificati SSL per abilitare questo?

Questo servizio molto probabilmente vivrà su AppHarbor se ciò è importante.

EDIT

chiunque può citare esempi specifici di come per raggiungere questo obiettivo in pila servizio. Penso che mi piacerebbe avere tutti i servizi nella mia API richiedono HTTPS. Sarei in grado di farlo utilizzando i filtri di richiesta?

+0

non ho fatto il cambiamento, ma si potrebbe desiderare di fare una domanda di follow-up o taggare questo con appharbor per avvisare la comunità di Appharbor, sono abbastanza utili. – Dan

risposta

8

Avrai bisogno di avere un certificato SSL acquistato e installato per gestire https (dovresti essere in grado di ottenerne uno dal tuo provider di nomi di dominio, che dovrai installare sul tuo server di hosting). I clienti del servizio saranno generalmente autorizzati a connettersi con qualsiasi metodo scelgano. Sarà tua responsabilità interrompere la richiesta e generare un messaggio di errore sul client se tentano di connettersi tramite http, invece di consentirne l'accesso.

È possibile verificare se si trovano su http o https controllando la proprietà Request.Url.Scheme nell'API del servizio REST. In genere, una richiesta per http su un servizio che richiede https restituirà un codice di stato HTTP 403 (vietato). Se si ha accesso a IIS, è possibile forzare HTTPS facilmente senza fare alcuna codifica: http://www.sslshopper.com/iis7-redirect-http-to-https.html

+2

Grazie per le informazioni. Penso che avrò bisogno di ulteriori informazioni sull'implementazione di questo specifico in servicestack.net. Non avrò accesso a queste impostazioni in IIS tramite appharbor per quanto ne so. – stephen776

+0

@ stephen776- sei stato in grado di implementarlo su un servicestack? Dato che è qualche anno fa, qual è stata la tua esperienza con SS e https? –

2

Se non è necessario su tutti i servizi quanto segue nella parte superiore di qualsiasi servizio che ha bisogno di sicurezza fa il lavoro:

if (!Request.IsSecureConnection) 
    { 
     throw new HttpError(HttpStatusCode.Forbidden,"403","HTTPS ONLY"); 
    } 

Tuttavia è meglio a questo come un attributo di filtro: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

Se lo vuoi a livello globale, è possibile applicare l'attributo a un BaseService condivisa o l'uso di un filtro globale: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

... Ti piace questa:

this.GlobalRequestFilters.Add((req, res, dto) => 
{ 
    if (!req.IsSecureConnection) 
    { 
     res.StatusCode = (int)HttpStatusCode.Forbidden; 
     res.Close(); 
    } 
}); 

Se si vuole uno che reindirizza a https anziché respingere la richiesta allora si potrebbe basare su questo: http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers

Problemi correlati