2011-10-12 9 views
11

Chciałbym uwierzytelnić użytkowników moich usług serwisowych servicestack.net za pomocą podstawowego uwierzytelniania przez HTTPS.Jak mogę wdrożyć wywołanie usługi ServiceStack.net przez HTTPS?

Czy ktoś może wyjaśnić, w jaki sposób część https będzie działała, lub wskazać mi właściwy kierunek? Czy klient jest odpowiedzialny za to, aby połączenia były wykonywane za pośrednictwem protokołu HTTPS? Czy muszę zrobić wszystko, co wiąże się z certyfikatami SSL, aby to umożliwić?

Ta usługa najprawdopodobniej będzie dostępna w AppHarbor, jeśli to ma znaczenie.

EDIT

Może ktoś przytoczyć konkretne przykłady, jak to osiągnąć w stosie usług. Myślę, że wszystkie usługi w moim interfejsie wymagają usługi HTTPS. Czy byłbym w stanie to osiągnąć za pomocą filtrów żądań?

+0

Nie dokonać zmiany, ale warto zadaj pytanie uzupełniające lub oznaczyć je tagiem appharbor, aby powiadomić społeczność appharbor, są one bardzo pomocne. – Dan

Odpowiedz

8

Konieczne będzie posiadanie certyfikatu SSL zakupionego i zainstalowanego w celu obsługi protokołu HTTPS (powinieneś być w stanie uzyskać certyfikat od dostawcy nazwy domeny, który następnie będziesz musiał zainstalować na swoim serwerze hostingowym). Klienci usług będą na ogół mogli łączyć się dowolnie wybraną metodą. Twoim obowiązkiem będzie zatrzymanie żądania i wygenerowanie komunikatu o błędzie dla klienta, jeśli spróbują połączyć się przez http, zamiast umożliwić im dostęp.

Możesz zweryfikować, czy są na http lub https, sprawdzając właściwość Request.Url.Scheme w interfejsie API usług REST. Zazwyczaj żądanie http w usłudze, która wymaga https, zwróci kod statusu HTTP 403 (zabroniony). Jeśli masz dostęp do IIS, można wymusić HTTPS łatwo bez jakiegokolwiek Kodowanie: http://www.sslshopper.com/iis7-redirect-http-to-https.html

+2

Dzięki za informacje. Myślę, że będę potrzebował trochę więcej informacji na temat implementacji tego w serwisie servicestack.net. Nie będę miał dostępu do tych ustawień w IIS przez appharbor, o ile wiem. – stephen776

+0

@ stephen776 - czy udało ci się to zaimplementować w serwisie servicestack? Biorąc pod uwagę, że minęło kilka lat, jakie masz doświadczenia z SS i https? –

2

jeśli nie trzeba na wszystkich służb następujące u góry dowolnej usługi, która wymaga zabezpieczenia spełnia swoje zadanie:

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

jednak lepiej to jako atrybut filtr: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

Jeśli chcesz go globalnie, można zastosować atrybut do udostępnionego BaseService lub lepiej wykorzystać filtr globalny: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

... Jak to:

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

Jeśli chcesz taki, który przekierowuje do https zamiast odrzucać żądania następnie można oprzeć go na to: http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers

Powiązane problemy