Подтвердить что ты не робот

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

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

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

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

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

Ответ 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