OAuth2 с клиентским API Google 1.8.1

Я использую клиентский API Google в веб-приложении .NET, но мне нужно обновить его до последней версии (как для использования самого последнего кода, так и для того, чтобы избавиться от необходимости в DotNetOpenAuth.dll). Последняя версия (1.8. 1) имеет полностью переработанный интерфейс OAuth (с использованием google.apis.auth), и я даже не могу начать работу с ним.

Ранее я написал код, который обрабатывал создание AuthorizationURL (по мере необходимости) и создание объектов IAuthenticator и IAuthorizationState, сохраняя токен обновления в базе данных sql по мере необходимости. Я также собирался получить «UserInfo» о пользователе по мере необходимости (после аутентификации).

Теперь - я не понимаю, как обрабатывать генерацию AuthURL (мне нужно делать это на 100% вручную?) и как/что мне нужно передать BaseClientService.Initializer при работе с клиентским API (например, Google Водить машину.)

Кроме того, ранее я писал методы для «хранения» и «извлечения» учетных данных из базы данных — теперь, похоже, мне нужно написать класс на основе IDataStore? Но я не уверен, что это даже правильно (не говоря уже о том, чтобы где-нибудь найти достойный образец/документ).

Наконец, похоже, что google.apis.auth не обрабатывает что-либо в отношении UserInfo — мне нужно взять google.apis.oauth2 — но у этой .dll есть даже МЕНЬШЕ документации/пример кода.

Любые советы о том, с чего начать? Пример кода google.apis кажется подходящим для выполнения основных задач API, но вся информация об Oauth2 очень проста, использует файловое хранилище данных и кажется приукрашенной.

Спасибо!


person Bill    schedule 28.04.2014    source источник
comment
Если вы находитесь в аду SDK DLL, возможно, стоит подумать о том, чтобы выбросить все это и сделать свои собственные http-вызовы OAuth. Вы будете удивлены тем, насколько это просто.   -  person pinoyyid    schedule 29.04.2014


Ответы (1)


Прежде всего, взгляните на https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth. Вся документация, которая может вам понадобиться, есть, и если чего-то не хватает, сообщите нам!

Вы правы, у вас уже есть реализация FileDataStore, и мы планируем также создать EFDataStore для следующего релиза.

person peleyal    schedule 28.04.2014
comment
Я боялся, что это может быть ответом - ссылка не содержит никаких подробностей о создании AuthorizationURL (я предполагаю, что это предполагало все, что было обработано ранее), реализации пользовательского IDataStore, доступе к UserInfo - или обработке любого процесса в чем-то напоминающий сценарий из реальной жизни (хотя я снова предполагаю, что эта последняя часть связана с нарушением моего понимания). Есть ли ГДЕ-НИБУДЬ еще искать какие-либо детали реального мира в Интернете? - person Bill; 28.04.2014
comment
Мне это не очень помогает, так как это приложение веб-форм, а не приложение MVC (на самом деле существующая интеграция API Google была выполнена в библиотеке классов). Я экспериментировал с GoogleWebAuthorizationBroker, и он автоматически перенаправляется, но похоже, он использует фиксированный URL-адрес ПЕРЕНАПРАВЛЕНИЯ. - person Bill; 28.04.2014
comment
кажется, что многие простые/полезные функции спрятаны. Я могу сгенерировать URL-адрес авторизации с помощью GoogleAuthorizationCodeFlow, но, похоже, нет способа принудительно запросить доступ без переопределения потока с пользовательским. Кроме того, все кажется асинхронным, что имеет смысл, но создает серьезные проблемы при попытке простого решения на основе веб-сайта. - person Bill; 28.04.2014
comment
peleyal - раз уж вы так любезно ответили на мои вопросы, - я надеюсь, что вы сможете подсказать по одному пункту. Он вращается вокруг различных асинхронных вызовов oauth2, которые являются частью API. Как правильно вызывать их синхронно из веб-приложения? Я обернул асинхронные методы (которые используют ожидание) синхронными версиями, которые возвращают значение, используя .Result. Это блокирует, если я не использую .ConfigureAwait(false) - но я вижу загадочные предупреждения о том, что НЕ делаю этого... - person Bill; 29.04.2014
comment
Помогает ли вам этот образец? code.google.com/p/google-api-dotnet-client/source/browse/ Это образец ASP (не MVC) для Tasks API. Он использует синхронизирующие вызовы... - person peleyal; 29.04.2014