python - prices - Los puntos finales de Google App Engine OAuth lanzan 400 en producción
instance class app engine (3)
¿Qué método de solicitud es? En dev_appserver_oauth.py
veo:
if method != ''GET'' and method != ''POST'':
outfile.write(''Status: 400/r/n'')
return
Así que solo funcionará para solicitudes GET
o POST
.
Implementé el soporte experimental de OAuth para Google App Engine usando Python, y lo tengo funcionando localmente, pero los puntos finales están lanzando un 400 cuando lo implemento en appspot.
Por ejemplo, la url http (s): //my-app.appspot.com/_ah/OAuthGetRequestToken devuelve 400, pero localmente ese patrón de url se comporta como se espera.
He probado http y https, y asumí que appspot maneja el certificado ssl.
ACTUALIZAR
He estado usando el OAuth Playground para probar mi código. A pesar de la documentación, parece que es necesario registrar su aplicación. Vaya here para obtener instrucciones sobre cómo registrarse. De acuerdo con la documentación durante el proceso de registro, no se requiere certificado cuando se ejecuta en App Engine. Zona de juegos muestra más detalles sobre el error: "firma no válida". Si entiendo correctamente, la firma se produce a partir de una cadena de base de firma. En este caso estoy usando la cadena base 7DYB6MJ2s-IQcd7VJYJUmcct.
GET /accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fmail.google.com%2Fmail%2Ffeed%2Fatom HTTP/1.1
Host: www.google.com
Accept: */*
Authorization: OAuth oauth_version="1.0", oauth_nonce="168cfd60a93a46caa38dddfdcedd9de9", oauth_timestamp="1305315895", oauth_consumer_key="xxxxxxx.appspot.com", oauth_callback="http%3A%2F%2Fgooglecodesamples.com%2Foauth_playground%2Findex.php", oauth_signature_method="HMAC-SHA1", oauth_signature="4J5faUujE0VNaybyvFCiEPY7DQ8%3D"
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=UTF-8
Date: Fri, 13 May 2011 19:44:55 GMT
Expires: Fri, 13 May 2011 19:44:55 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Length: 451
Server: GSE
**signature_invalid**
base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dhttp%253A%252F%252Fgooglecodesamples.com%252Foauth_playground%252Findex.php%26oauth_consumer_key%3Dxxxxxx.appspot.com%26oauth_nonce%3D168cf60a94caa38e2defdcedd9de9%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1305315895%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fmail.google.com%252Fmail%252Ffeed%252Fatom
ACTUALIZACIÓN FINAL
Hubo dos cosas que causaron el 400. Primero, la aplicación no estaba registrada. La documentación de Google dice que es opcional, pero ese no es el caso aparentemente. En segundo lugar, la solicitud no fue debidamente firmada. Aquí hay una excelente herramienta de depuración para probar sus solicitudes de OAuth: Oauth Playground
Debe registrar su dominio para que OAuth trabaje en producción.
Aunque los siguientes documentos indican que el registro es opcional: here
No funciona sin la inscripción desde enero.
Mira el enlace de arriba y registra tu dominio / aplicación. No es necesario enviar un certificado, esto sigue siendo opcional.
Primero asegúrese de haber habilitado el inicio de sesión federado en la configuración de la aplicación.
Según su descripción, parece que podría estar realizando una solicitud GET directa a /_ah/OAuthGetRequestToken
sin ninguno de los otros parámetros necesarios de oAuth. Esto funcionará en dev_appserver, ya que es simplemente una maqueta de oAuth para que puedas completar tu código.
Consulte los parámetros enumerados en la página de descripción de OAuthGetRequestToken para ver qué se requiere y cómo tratar con la firma. Creo que puedes ignorar el scope
de GAE sin embargo