Короткий вопрос: возможно ли это, и если да, то как?
Структура
У меня есть приложение .NET, которое в настоящее время использует учетную запись службы для доступа к информации в домене Google Apps с помощью API Google Диска. Это отлично работает с помощью google-api-dotnet-client library и кода в тех же строках как показано в примерах здесь - которые в настоящее время являются очень хорошим базовым примером того, что я делаю.
Теперь я хочу расширить его так же, как используя эти API, предоставленные в "новой" библиотеке google-api-dotnet-client, которая использует более старые библиотеки "GData", как это предусмотрено старше google-gdata library, в частности API таблиц (и, возможно, еще больше).
Проблема
Здесь возникает трудность. Бывшая библиотека делает именно то, что я хочу, о чем свидетельствует вторая ссылка в первом абзаце выше, - и тот факт, что я ее сам делаю. ОДНАКО... хотя вторая библиотека была обновлена для поддержки OAuth 2.0 в дополнение к OAuth 1.0 и другим старым методам auth, это не так, насколько я могу судить по обширным сайтам Googling и trail- и-error - разрешить операцию "учетная запись службы от имени всех моих пользователей", которая мне нужна.
Мой вопрос заключается в том, что я что-то упустил (возможно, трудно найти или не документировал что-то), что позволило бы мне делать то, что я хочу. В противном случае, могу ли я заставить это поведение и заставить эти две библиотеки работать бок о бок?
Идеальное решение
В идеале мне бы хотелось, чтобы экземпляр Google.GData.Spreadsheets.SpreadsheetsService
мог использовать экземпляр Google.Apis.Authentication.Auth2Authenticator<AssertionFlowClient>
, который я уже использую... как-то. Возможно ли такое колдовство? Я пропущу очевидное?
В противном случае я с удовольствием сделаю весь "клиент потока утверждения" OAuth2 "снова", если мне придется, в некотором роде, справиться с более старой библиотекой.
Справка
Другие мысли
Я рассмотрел и отклонил на данный момент - возможность начать с нуля и написать свою собственную библиотеку, чтобы это произошло. Это происходит по двум причинам:
- Библиотека gdata уже существует и была разработана многими людьми, более умными, чем я. Я не настолько высокомерен, что считаю, что могу сделать лучше.
- Я не уверен, что OAuth2 с подходом к учетной записи службы поддерживается даже на этих более старых API-интерфейсах.
Альтернативный подход, который я надеялся избежать, но, возможно, придется отпасть в зависимости от ответов здесь, будет использовать двухсторонний OAuth 1.0 для части этого. Я бы предпочел не делать этого, поскольку части приложения полагаются на один старый метод auth, в то время как другие части делают это, хороший новый способ просто мне не нравится. И там гораздо больше, чтобы пойти не так...
Обновление
Я рассмотрел возможность подкласса GDataRequestFactory и GDataRequest, чтобы я мог сделать свой собственный запрос factory, и у него есть экземпляр Google.Apis.Authentication.Auth2Authenticator<AssertionFlowClient>
(ну, экземпляр Google.Apis.Authentication.IAuthenticator
в любом случае), который мог бы выполнить аутентификацию запрос перед его вызовом. Однако... конструктор для GDataRequest является внутренним, что остановило меня.
Это похоже на то, что это не должно быть.