Как я могу реализовать вызов покоя ServiceStack.net через HTTPS?

Я хотел бы аутентифицировать пользователей моих сервисов отдыха servicestack.net, используя базовую аутентификацию через HTTPS.

Может ли кто-нибудь объяснить, как будет работать часть https, или указать мне правильное направление? Ответственность за то, чтобы вызовы выполнялись через https, лежит на клиенте? Нужно ли мне делать что-либо, связанное с SSL-сертификатами, чтобы включить это?

Этот сервис, скорее всего, будет жить в AppHarbor, если это имеет значение.

ИЗМЕНИТЬ

Может ли кто-нибудь привести конкретные примеры того, как это сделать в сервисном стеке. Я думаю, что все службы в моем API требуют HTTPS. Смогу ли я сделать это, используя фильтры запросов?


person stephen776    schedule 12.10.2011    source источник
comment
Я не вносил изменения, но вы можете задать дополнительный вопрос или пометить этот вопрос с помощью appharbor, чтобы предупредить сообщество appharbor, они очень полезны.   -  person Dan    schedule 14.10.2011


Ответы (2)


Вам нужно будет приобрести и установить SSL-сертификат для работы с https (вы должны получить его у своего поставщика доменных имен, который затем вам нужно будет установить на вашем хостинг-сервере). Клиентам службы, как правило, разрешается подключаться любым способом, который они выберут. Вы несете ответственность за то, чтобы остановить запрос и сгенерировать сообщение об ошибке для клиента, если он попытается подключиться по http, вместо того, чтобы разрешить ему доступ.

Вы можете проверить, находятся ли они на http или https, проверив Request.Url.Scheme< /a> в API службы REST. Как правило, запрос http для службы, для которой требуется https, возвращает код состояния HTTP 403 (запрещено). Если у вас есть доступ к IIS, вы можете легко включить HTTPS без какого-либо кодирования: http://www.sslshopper.com/iis7-redirect-http-to-https.html

person mellamokb    schedule 12.10.2011
comment
Спасибо за информацию. Я думаю, мне понадобится немного больше информации о реализации этого конкретно в servicestack.net. Насколько я знаю, у меня не будет доступа к этим настройкам в IIS через appharbor. - person stephen776; 12.10.2011
comment
@ stephen776- ты смог реализовать это в стеке сервисов? Учитывая, что это было несколько лет назад, каков ваш опыт работы с SS и https? - person Mark; 13.11.2015

Если вам не нужны все службы, следующее в верхней части любой службы, которая нуждается в безопасности, выполняет эту работу:

    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

person Darren    schedule 01.01.2015