Как я могу реализовать оставшийся вызов ServiceStack.net через HTTPS? - PullRequest
11 голосов
/ 12 октября 2011

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

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

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

РЕДАКТИРОВАТЬ

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

Ответы [ 2 ]

8 голосов
/ 12 октября 2011

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

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

2 голосов
/ 01 января 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

...