首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >谷歌应用引擎OAuth端点在生产中抛出400个

谷歌应用引擎OAuth端点在生产中抛出400个
EN

Stack Overflow用户
提问于 2011-05-09 22:35:13
回答 3查看 2.2K关注 0票数 16

我使用Python实现了Google App Engine的experimental OAuth support,并让它在本地工作,但当我部署到appspot时,端点抛出了一个400。

例如,url http(s)://my-app.appspot.com/_ah/OAuthGetRequestToken返回400,但在本地,该url模式的行为与预期一致。

我尝试过http和https,并假定appspot处理ssl证书。

更新

我一直在使用OAuth Playground测试我的代码。尽管有文档,但注册你的应用程序似乎是必需的。有关如何注册的说明,请访问here。根据注册过程中的文档,在App Engine上运行时不需要证书。Playground正在显示有关错误的更多详细信息-“签名无效”。如果我理解正确的话,签名是由签名基串生成的。在本例中,我使用基本字符串7DYB6MJ2s-IQcd7VJYJUmcct。

代码语言:javascript
复制
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

最终更新

造成400人死亡的原因有两个。首先,该应用程序未注册。谷歌的文档说这是可选的,但事实显然并非如此。其次,请求没有正确签名。这里是测试OAuth请求的一个很好的调试工具:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-13 23:29:30

您必须注册您的域,才能使OAuth在生产环境中运行。

尽管以下文档声明注册是可选的:http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html

从一月份开始,如果没有注册,它就不能工作。

查看上面的链接并注册您的域/应用程序。您不需要提交证书,这仍然是可选的。

票数 4
EN

Stack Overflow用户

发布于 2011-05-10 20:14:00

是哪种请求方法?在dev_appserver_oauth.py中,我看到:

代码语言:javascript
复制
if method != 'GET' and method != 'POST':
  outfile.write('Status: 400\r\n')
  return

因此它只适用于GETPOST请求。

票数 0
EN

Stack Overflow用户

发布于 2011-05-13 23:17:26

首先,确保您在应用程序设置中启用了联合登录。

根据您的描述,听起来您可能只是在执行对/_ah/OAuthGetRequestToken的直接GET请求,而不需要oAuth的任何其他必需参数。这将在dev_appserver上工作,因为它只是oAuth的一个模型,让您可以充实您的代码。

请参阅OAuthGetRequestToken description page上列出的参数,了解需要什么以及如何处理签名。我相信你可以忽略scope的GAE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5938387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档