Я написал приложение MVC с помощью Google oauth2, как указано здесь: https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web_applicationsСрок действия токена доступа Google OAuth в приложении MVC?
У меня есть проблема с истечением маркер доступа. По истечении срока действия маркера доступа, я получаю исключение при вызове Google API: «Маркер доступа истек, но мы не можем обновить его»
Первоначальная проверка подлинности двух итераций механизм:
первой итерации AuthorizeAsync возвращается результат с пустыми учетными данными и заселена RedirectUri:
Таким образом, гиперссылка авторизации создана такое:
https://accounts.google.com/o/oauth2/auth?access_type=offline&response_type=code&client_id=MYCLIENTID&redirect_uri=http:%2F%2Flocalhost%2FHomepage%2FAuthCallback%2FIndexAsync&scope=https:%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar https:%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&state=http:%2F%2Flocalhost%2FHomepage%2F95419199
Обратите внимание, что access_type = отсутствует в Presen т. Поэтому я также должен вернуть токен обновления (не получается).
второй итерация - AuthorizeAsync возвращает результат с заполненными и пустым учетными данными RedirectUri:
Question1 - это RefreshToken должен быть пустыми в данный момент?
Результат запоминается, так как он определен как статический.
Следующая запрос, который приходит в - действие календарь, который требует result.Credential вызвать Google Calendar API:
Вопрос2 - если маркер доступа истекает к тому моменту (для тестирования я просто установить ExpiresInSeconds = 0), Я вызываю метод RefreshTokenAsync, но он всегда возвращает false! Зачем? Что мне здесь не хватает?
И каков был бы правильный способ обработки, когда RefreshTokenAsync возвращает false? Текущая команда RedirectResult (result.RedirectUri) завершится с момента получения результата. RedirectUri имеет значение null.