2011-10-12 11 views
11

Me gustaría autenticar a los usuarios de mis servicios de descanso servicestack.net utilizando la autenticación básica a través de HTTPS.¿Cómo puedo implementar la llamada de resto de ServiceStack.net a través de HTTPS?

¿Alguien puede explicar cómo funcionaría la parte https de esto o señalarme en la dirección correcta? ¿Es responsabilidad del cliente asegurarse de que las llamadas se realicen a través de https? ¿Debo hacer algo con certificados SSL para habilitar esto?

Este servicio probablemente vivirá en AppHarbor si eso es importante.

EDITAR

Puede alguien citar ejemplos específicos de cómo lograr esto en la pila de servicio. Creo que tendría todos los servicios de mi API que requieren HTTPS. ¿Sería capaz de lograr esto usando filtros de solicitud?

+0

no hice el cambio, pero puede que desee haga una pregunta de seguimiento o etiquete esta con el appharbor para alertar a la comunidad de appharbor, son bastante útiles. – Dan

Respuesta

8

Necesitará tener un certificado SSL comprado e instalado para manejar https (debe poder obtener uno de su proveedor de nombre de dominio, que luego deberá instalar en su servidor de alojamiento). Los clientes del servicio generalmente podrán conectarse por cualquier método que elijan. Será su responsabilidad detener la solicitud y generar un mensaje de error para el cliente si intentan conectarse por http, en lugar de permitirles el acceso.

Puede validar si están en http o https marcando la propiedad Request.Url.Scheme en su API de servicio REST. Normalmente, una solicitud de http en un servicio que requiere https devolverá un código de estado HTTP 403 (prohibido). Si tiene acceso a IIS, puede forzar HTTPS fácilmente sin hacer ningún tipo de codificación: http://www.sslshopper.com/iis7-redirect-http-to-https.html

+2

Gracias por la información. Creo que voy a necesitar un poco más de información sobre cómo implementar esto específicamente en servicestack.net. Por lo que sé, no tendré acceso a estas configuraciones en IIS a través de appharbor. – stephen776

+0

@ stephen776- ¿Pudiste implementar esto en la pila de servicios? Dado que es hace unos años, ¿cuál ha sido su experiencia con SS y https? –

2

Si no es necesario en todos los servicios de la siguiente en la parte superior de cualquier servicio que necesita la seguridad hace el trabajo:

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

Sin embargo, es mejor esto como un atributo de filtro: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

Si usted quiere que todo el mundo, se podría aplicar el atributo a un BaseService compartida o mejor utilizar un filtro global: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

... De esta manera:

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

Si quieres uno que redirige a https en lugar de rechazar la solicitud de entonces se podría basar en esto: http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers

Cuestiones relacionadas