Как я могу реализовать оставшийся вызов ServiceStack.net через HTTPS?
Я хотел бы аутентифицировать пользователей моих сервисов отдыха servicestack.net, используя базовую аутентификацию через HTTPS.
Может кто-нибудь объяснить, как часть https работает, или указать мне правильное направление? Это ответственность клиента, чтобы убедиться, что звонки осуществляются через https? Нужно ли что-нибудь делать с SSL-сертификатами, чтобы включить это?
Этот сервис, скорее всего, будет жить на AppHarbor, если это имеет значение.
РЕДАКТИРОВАТЬ
Может кто-нибудь привести конкретные примеры того, как сделать это в стеке услуг. Я думаю, что я хотел бы иметь все службы в моем API требуют HTTPS. Смогу ли я сделать это, используя фильтры запросов?
2 ответа
Для обработки https вам необходимо приобрести и установить SSL-сертификат (вы должны получить его у своего провайдера доменных имен, который затем необходимо будет установить на хост-сервере). Сервисным клиентам обычно разрешается подключаться любым способом, который они выбирают. Вы будете обязаны остановить запрос и сгенерировать сообщение об ошибке для клиента, если он попытается подключиться по http, вместо того, чтобы разрешить ему доступ.
Вы можете проверить, находятся ли они на http или https, проверив Request.Url.Scheme
свойство в вашем REST Service API. Как правило, запрос http для службы, которая требует https, возвращает код состояния HTTP 403 (запрещенный). Если у вас есть доступ к IIS, вы можете легко запустить HTTPS без какого-либо кодирования: http://www.sslshopper.com/iis7-redirect-http-to-https.html
Если вам не нужны все службы, то в верхней части любой службы, требующей безопасности, можно выполнить следующие действия:
if (!Request.IsSecureConnection)
{
throw new HttpError(HttpStatusCode.Forbidden,"403","HTTPS ONLY");
}
Однако это лучше использовать в качестве атрибута фильтра: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes
Если вы хотите это глобально, вы можете применить свой атрибут к общему BaseService или лучше использовать глобальный фильтр: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters
...Как это:
this.GlobalRequestFilters.Add((req, res, dto) =>
{
if (!req.IsSecureConnection)
{
res.StatusCode = (int)HttpStatusCode.Forbidden;
res.Close();
}
});
Если вам нужен тот, который перенаправляет на https, а не отклоняет запрос, вы можете основать его на этом: http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers