Как я могу реализовать оставшийся вызов 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

Другие вопросы по тегам