Как начать работу с OAuth для защиты приложения веб-API? - программирование
Подтвердить что ты не робот

Как начать работу с OAuth для защиты приложения веб-API?

У меня есть приложение веб-API, и я понял, что OAuth будет стандартной моделью безопасности для API, где сервер аутентификации станет ответственным за создание токенов авторизации, чтобы пользователь мог отправлять на наш сервер и потреблять сервисы.

Я очень новичок в этом, но я понимаю, какие роли:

  • Владелец ресурса
  • Клиент
  • Сервер ресурсов
  • Сервер авторизации

Но что такое OAuth именно на практике, а не в теории? Это библиотека .NET? Это услуга, предоставляемая отдельной компанией? Это что-то, что я могу настроить на своей локальной машине разработки и посмотреть, как она работает?

Как начать работу с OAuth для защиты приложения веб-API?

4b9b3361

Ответ 1

OAuth - это протокол; текущая версия OAuth 2.0. Что касается вашего вопроса, эта ссылка перечисляет несколько реализаций протокола в различных технологиях. Для использования с .NET Web API вы, вероятно, интересуетесь DotNetOpenAuth, который обеспечивает реализацию как OAuth 1, так и OAuth 2.

Я использую DotNetOpenAuth в приложении, над которым я сейчас работаю, для защиты .NET Web API. У меня есть OAuth2Handler, который расширяет DelegatingHandler, который вставляется в конвейер веб-API до того, как входящие запросы достигнут любых контроллеров. OAuth2Handler выполняет следующие действия:

  • Создает экземпляр DotNetOpenAuth ResourceServer
  • Вызов ResourceServer.GetPrincipal(), который считывает и расшифровывает доступ токен (выдается в другом месте AuthorizationServer и возвращает OAuthPrincipal (В моем случае я читаю дополнительные данные, которые реализация DotNetOpenAuth позволяет вам передать и создать ClaimsPrincipal.)
  • Назначение IPrincipal, содержащего информацию пользователя, считываемую из токена доступа, в свойство пользователя потока и текущего контекста HTTP, поэтому он доступен из ApiController.User в сервисных контроллерах: httpContext.User = Thread.CurrentPrincipal = principal;

Честно говоря, получение этой работы (например, настройка сервера авторизации, сервера ресурсов, сертификатов и т.д.) не является тривиальным. К сожалению, не было хорошего руководства на сайте DotNetOpenAuth. Вот несколько других задач, которые вы будете перед вами, если вы пройдете этот маршрут:

  • Реализация IAuthorizationServer. Это интерфейс, предоставляемый DotNetOpenAuth, который позволяет подключаться к библиотеке и использовать их реализация выдала токены доступа OAuth2. Вам также необходимо реализовать INonceStore и ICryptoKeyStore, которые я использовал, используя контекст EntityFramework для хранения.
  • Настройка сертификатов. AuthorizationServer и ResourceServer каждый использует сертификаты для шифрования/дешифрования маркера доступа, гарантируя, что они доступны только друг другу. Я построил специальную конфигурацию , чтобы я мог управлять этой конфигурацией в файлах web.config моего приложения-сервера авторизации и моих сервисов веб-API (сервер ресурсов).
  • Управление токеном обновления. При первом запросе маркера доступа с сервера авторизации вы вернетесь (в зависимости от вашей конфигурации) как токен обновления OAuth2, так и токен доступа. В сервисах используется токен доступа, который должен быть недолговечным. Токен обновления используется для получения дополнительных токенов доступа. Токен обновления должен храниться в секрете (независимо от того, что это означает в вашем сценарии). Для меня это означает, что токен обновления никогда не подвергается JavaScript-клиенту на стороне клиента в моем веб-приложении.

Я надеюсь, что это поможет вам получить представление о том, как начать работу с OAuth и .NET Web API. Здесь сообщение в блоге, демонстрирующее некоторые из этих шагов. Этот ответ SO дает несколько более подробных сведений о клиентской стороне изображения.

(Теперь онлайн-документы DotNetOpenAuth, похоже, сейчас не работают... извините за отсутствие ссылок на них, по-видимому, это произошло до).