Как обращаться с ошибкой redirect_uri_mismatch, когда приложение Android получает автономный доступ для веб-back-end? - программирование

Как обращаться с ошибкой redirect_uri_mismatch, когда приложение Android получает автономный доступ для веб-back-end?

Я хотел реализовать поток, описанный в этом вопросе:

Аутентификация с помощью OAuth2 для приложения * и * веб-сайта

Решение Google для этого требования описано здесь:

https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess

Я следил за этим руководством, но, к сожалению, когда я использую код авторизации в бэкэнд для доступа к токену и обновляю токен из google, google выкидывает эту ошибку:

{
  "error": "invalid_request",
  "error_description": "Missing parameter: redirect_uri"
}

redirect_uri не имеет смысла для этой ситуации, потому что клиентская сторона - андроид.

Есть также некоторые советы, которые, по их словам, используют "postmessage" в качестве перенаправления uri или используют http://localhost как перенаправление uri или добавить адрес сервера в перенаправлении URI в консоли приложения Google, но ни один из них не работает для этого потока.

4b9b3361

Ответ 1

Я много раз тратил на решение этой проблемы, и этот инструмент (https://developers.google.com/oauthplayground) был предоставлен google, что делает меня более пропущенным, потому что он был разработан для основного веб-потока, и токен доступа, созданный этим инструментом, был другим и нуждался в перенаправлении uri. (даже при использовании типа токена-носителя и с использованием идентификатора клиента и секретности) в конце концов, я пустую строку user ("") как URL-адрес перенаправления, и, наконец, мне удастся получить токен доступа через серверную сторону.

Ответ 3

Проведите два дня и изучите почти все проблемы в stackoverflow и google, прежде чем глубоко изучить библиотеку AppAuth (https://openid.github.io/AppAuth-iOS/ и https://openid.github.io/AppAuth-Android/) и, наконец, нашел ответ.

Итак, есть два правила, которые я нашел:

  • redirect_uri должен быть одним из:

    • ваше приложение bundle_id или package_name + :/ или :// + *your_path* (например com.example.myapp://google_auth)
    • ваш client_id в обратной форме DNS + :/ или :// + *your_path* (например com.googleusercontent.apps.*account_id*:/my_path)
  • redirect_uri в исходном запросе кода авторизации (https://accounts.google.com/o/oauth2/v2/auth) и в запросе обмена кодом авторизации (https://www.googleapis.com/oauth2/v4/token) должен быть полностью одинаковым