Google OAuth2 redirect_uri_mismatch при обмене кода для токена на сервере - PullRequest
0 голосов
/ 22 января 2020

Несмотря на то, что это довольно подробно, я все еще пытаюсь настроить свой сайт для надлежащей аутентификации в Google Oauth в течение некоторого времени. Я получаю ошибку "redirect_uri_mismatch", когда пытаюсь обменять код на токен аутентификации на сервере. Я хотел бы понять это принципиально. Интерфейс успешно получает автономный код с этим запросом:

https://accounts.google.com/o/oauth2/iframerpc?action=issueToken&response_type=token%20id_token&login_hint=AXXXXXXXX&client_id=XXX.apps.googleusercontent.com&origin=http%3A%2F%2Flocalhost%3A8000&scope=openid%20profile%20email&ss_domain=http%3A%2F%2Flocalhost%3A8000

Код затем передается бэкэнду. Бэкэнд делает этот запрос и завершается неудачно:

send: b'POST /o/oauth2/token HTTP/1.1\r\nHost: accounts.google.com\r\nUser-Agent: python-requests/2.22.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: application/json\r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 294\r\n\r\n'
send: b'grant_type=authorization_code&code=XXXX&client_id=XXXX.apps.googleusercontent.com&client_secret=XXXX&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2F'
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Content-Type: application/json; charset=utf-8
header: Vary: Origin
header: Vary: X-Origin
header: Vary: Referer
header: Content-Encoding: gzip
header: Date: Wed, 22 Jan 2020 10:06:01 GMT
header: Server: ESF
header: Cache-Control: private
header: X-XSS-Protection: 0
header: X-Frame-Options: SAMEORIGIN
header: X-Content-Type-Options: nosniff
header: Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
header: Transfer-Encoding: chunked
Authentication process canceled; ; {'error': 'redirect_uri_mismatch', 'error_description': 'Bad Request'}
WARNING Bad Request: /api/v1/login/social/knox_user/google-oauth2/
WARNING "POST /api/v1/login/social/knox_user/google-oauth2/ HTTP/1.1" 400 0

Я добавил «http://localhost: 8000 / » в «URI авторизованного перенаправления» в консоли Google. Кроме того, авторизованные JavaScript происхождение правильны: "http://localhost: 8000 ".

Мой стек - "response-google-login": "^ 5.0.7" для фронта конец. Мне очень нравится всплывающий поток ввода iframe. Это прекрасно работает для получения автономного кода авторизации.

На стороне сервера я использую rest-social-auth == 3.0.0, social-auth-app-django == 3.1.0 и social-auth- core == 3.2.0 с этой настройкой:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'XXX.apps.googleusercontent.com'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'XXX'
SOCIAL_AUTH_LOGIN_REDIRECT_URL = 'http://localhost:8000/'
SOCIAL_AUTH_LOGIN_ERROR_URL = 'http://localhost:8000/'
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ['email', 'profile', 'openid']

AUTHENTICATION_BACKENDS = [
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
]

...
urlpatterns = [
    path('api/v1/login/', include('rest_social_auth.urls_knox')),

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 января 2020

Вы используете response_type = 'token id_token', который является (устаревшим) неявным потоком. Я не вижу, как вы получите значение кода. Попробуйте использовать response_type = 'code'.

Если вы создаете одностраничное приложение, то СТАНДАРТНЫЕ сообщения - это шаги 4 и 7 из моего блога .

У меня есть Некоторое время не пользовался Google, поэтому всегда возможно, что их решение немного отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...