Я получаю redirect_uri_mismatch всякий раз, когда пытаюсь использовать Google OAuth 2.0 на своем веб-сайте. Я использую aws ec2 + route53 + nginx + uwgsi + flask + socketio
Авторизованные URI перенаправления: пришлось добавить круглые скобки, чтобы удалить ссылку.
- (http)://example.net/auth/oauth2callback
- (http)s://example.net/auth/oauth2callback
- (http)://www.example.net/auth/oauth2callback
- (http)s://www.example.net/auth/oauth2callback
- (http)://localhost/auth/oauth2callback
- (http)s://localhost/auth/oauth2callback
Я также добавил завершающий «/», но, похоже, это ничего не исправляет. Я подозреваю, что это проблема с настройкой сервера nginx или какая-то проблема с подключением между nginx -> uwsgi -> flask, поскольку URI перенаправления, о котором мне сообщает страница с ошибкой Google, точно соответствует URI, которые я указал в настройках OAuth Google.
Вот конфигурация моего сервера nginx:
server {
listen 80;
server_name www.example.net;
return 301 http://example.net;
}
server {
listen 80;
server_name example.net;
return 301 https://example.net;
}
server {
listen 443;
server_name example.net;
ssl on;
ssl_certificate /certs.pem;
ssl_certificate_key /private.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers BLANK;
ssl_session_cache shared:SSL:50m;
ssl_dhparam /dhparam.pem;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
client_max_body_size 5M;
location / {
include uwsgi_params;
uwsgi_pass unix:/filename.sock;
}
}
Я просмотрел много документов по этому поводу. Большинство людей используют прокси, и им пришлось добавить несколько строк в конфигурацию сервера, чтобы справиться с этой проблемой, но, поскольку я их не использую, я считаю, что мне не нужно помещать какие-либо из них в мою конфигурацию. (На всякий случай я попробовал несколько решений, но, похоже, они все еще не исправили это.)
Без использования nginx и uwsgi мне удалось заставить функцию OAuth работать на локальном хосте.
Заранее спасибо!
Изменить--
@TarunLalwani Итак, я сделал это наполовину с помощью proxy_pass. Только добавив proxy_pass и ничего больше, я могу попасть на страницу входа в Google OAuth. Но как только я авторизую вход, он перенаправит пользователя обратно на 127.0.0.1:5000 (это то, что я установил для proxy_pass). Я думаю, что мне нужно сделать некоторые настройки обратного прокси. Что я добавил в блок местоположения сразу после proxy_pass:
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
Теперь обратный прокси-сервер, кажется, работает, так как OAuth снова не работает. Но OAuth 2.0 перенаправляет пользователя на http:example.net/auth/oauth2callback вместо http:127.0.0.1:5000/auth/oauth2callback
Я тестировал, добавляя каждую командную строку за строкой и перезапуская сервер. Перед добавлением proxy_set_header Host $host; я получаю http://127.0.0.1:5000/auth/oauth2callback в качестве URI перенаправления и получаю http://example.net/auth/oauth2callback при добавлении этой строки. Может быть, причина, по которой OAuth не работает, заключается в том, что пользователь перенаправляется на http://example.net/auth/oauth2callback вместо https://example.net/auth/oauth2callback?
Редактировать 2 --
Выполняя curl -v https://example.net/auth/oauth2callback, я получаю следующее:
* Trying my.ip...
* Connected to example.net (my.ip) port 443 (#0)
* found 173 certificates in certs
* found 696 certificates in certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
* server certificate verification OK
* server certificate status verification SKIPPED
* common name: example.net (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: CN=example.net
* start date: Sun, 10 Sep 2017 22:18:00 GMT
* expire date: Sat, 09 Dec 2017 22:18:00 GMT
* issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
* compression: NULL
* ALPN, server accepted to use http/1.1
> GET /auth/oauth2callback HTTP/1.1
> Host: feelsbadman.net
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 302 FOUND
< Server: nginx/1.10.3 (Ubuntu)
< Date: Tue, 12 Sep 2017 07:32:36 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 819
< Connection: keep-alive
< Location: https://accounts.google.com/o/oauth2/auth?client_id=myid-asdfasdfasdf.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Fexample.net%2Fauth%2Foauth2callback&scope=email&access_type=offline&response_type=code&include_granted_scopes=true
< Strict-Transport-Security: max-age=31536000
<
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
* Connection #0 to host example.net left intact
<p>You should be redirected automatically to target URL: <a href="https://accounts.google.com/o/oauth2/auth?client_id=myid-asdfasdfasdf.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Fexample.net%2Fauth%2Foauth2callback&scope=email&access_type=offline&response_type=code&include_granted_scopes=true">https://accounts.google.com/o/oauth2/auth?client_id=myid-asdfasdfasdf.apps.googleusercontent.com&redirect_uri=http://example.net/auth/oauth2callback&scope=email&access_type=offline&response_type=code&include_granted_scopes=true</a>.
proxy_set_header X-Forwarded-Host $host;в своем блокеlocation /? - person wkl   schedule 11.09.2017https://example.net/auth/oauth2callback, не соответствует тем, которые разрешены для клиента OAuth. - person D_Pain   schedule 12.09.2017proxy_redirect http://127.0.0.1:5000 https://example.net- person Tarun Lalwani   schedule 12.09.2017curl -v https://example.net/auth/oauth2callbackи посмотреть, какой результат вы получите? - person Tarun Lalwani   schedule 12.09.2017https://, а ваш обратный URL —http://example.net/auth/oauth2callbackи отклонен. Убедитесь, что обратный URL, отправленный в Google,https://example.net/auth/oauth2callbackи он установлен таким же вAuthorized Redirect URI- person Tarun Lalwani   schedule 12.09.2017