2017-09-11 7 views
0

Je reçois un redirect_uri_mismatch chaque fois que j'essaie d'utiliser Google OAuth 2.0 sur mon site Web. J'utilise aws ec2 + route53 + nginx + uwgsi + flacon + socketiogoogle oauth 2.0 redirect_uri_mismatch (aws ec2 + route53 + nginx + uwgsi + flacon + socketio)

Les URI de redirection autorisées: Doit ajouter des parenthèses pour supprimer le lien.

  • (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

J'ai ajouté un "/" final, mais cela ne semble pas résoudre quoi que ce soit. Je soupçonne que c'est un problème de configuration du serveur nginx ou un problème de connexion entre nginx -> uwsgi -> flask depuis la redirection uri ce que la page d'erreur de google me dit correspond exactement aux URI que j'ai mis dans les paramètres OAuth de Google.

Voici ma configuration du serveur 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; 
    } 
} 

Je l'ai regardé dans beaucoup de documents à ce sujet. La plupart des gens utilisent des proxies et ont dû ajouter quelques lignes dans la configuration du serveur pour gérer ce problème, mais comme je n'utilise pas de tels serveurs, je crois que je n'ai pas besoin de les mettre dans ma configuration. (J'ai essayé quelques solutions juste au cas où, mais elles ne semblaient pas le réparer.)

Sans utiliser nginx et uwsgi, j'ai réussi à faire fonctionner la fonctionnalité OAuth sur localhost.

Merci d'avance!

Éditer--
@TarunLalwani Bon, alors je l'ai eu pour que ça marche à moitié en utilisant proxy_pass. En ajoutant seulement proxy_pass et rien d'autre, je peux accéder à la page de connexion de Google OAuth. Mais une fois que j'autorise le login, il redirige l'utilisateur vers 127.0.0.1:5000 (ce que j'ai défini pour proxy_pass). Je pense que je dois faire une configuration de proxy inverse. Ce que j'ai ajouté dans le bloc situé juste après proxy_pass est la suivante:

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"; 

Maintenant, le proxy inverse semble fonctionner comme OAuth est brisé à nouveau. Mais l'OAuth 2.0 redirige l'utilisateur vers http:example.net/auth/oauth2callback au lieu de http:127.0.0.1:5000/auth/oauth2callback

J'ai testé en ajoutant chaque ligne ligne par ligne et en redémarrant le serveur. Avant d'ajouter proxy_set_header Host $host; est quand je obtiendrais http://127.0.0.1:5000/auth/oauth2callback comme un uri de redirection et j'obtiendrais http://example.net/auth/oauth2callback quand j'ajouterai cette ligne. Peut-être la raison pour laquelle OAuth est cassée est parce que l'utilisateur est redirigé vers http://example.net/auth/oauth2callback au lieu de https://example.net/auth/oauth2callback?

Modifier 2-
En faisant curl -v https://example.net/auth/oauth2callback je reçois le texte suivant:

* 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>. 
+0

Avez-vous essayé de placer 'proxy_set_header X-Forwarded-hôte hôte $,' dans votre 'lieu /' bloc? – birryree

+0

@birryree Oui, j'ai essayé de le mettre juste avant uwsgi_pass :( –

+0

Pouvez-vous vérifier dans le navigateur quel retour URL est retournée –

Répondre