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

#c# #asp.net #asp.net-mvc #appharbor #servicestack

#c# #asp.net #asp.net-mvc #appharbor #servicestack

Вопрос:

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

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

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

Редактировать

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

Комментарии:

1. Я не вносил изменений, но вы можете задать дополнительный вопрос или пометить его с помощью appharbor, чтобы предупредить сообщество appharbor, они очень полезны.

Ответ №1:

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

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

Комментарии:

1. Спасибо за информацию. Я думаю, мне понадобится немного больше информации о реализации этого конкретно в servicestack.net . Насколько я знаю, у меня не будет доступа к этим настройкам в IIS через appharbor.

2. @stephen776 — смогли ли вы реализовать это в servicestack? Учитывая, что это было несколько лет назад, каков был ваш опыт работы с SS и https?

Ответ №2:

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

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

Однако лучше использовать это как атрибут фильтра: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

Если вы хотите использовать его глобально, вы можете применить свой атрибут к общему базовому сервису или лучше использовать глобальный фильтр: 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