Ответ 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, похоже, сейчас не работают... извините за отсутствие ссылок на них, по-видимому, это произошло до).