2

我正在使用这种工具组合创建一个 webapp。我正在通过以下方式向 App Engine 进行身份验证:

class googleLogin(webapp.RequestHandler):
  def get(self):
    callbackURL = 'http://%s/googleLoginCallback' % getHost()

    #Create a client service
    gdClient = gdata.docs.service.DocsService()
    gdata.alt.appengine.run_on_appengine(gdClient)
    gdClient.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, 
                                     _GoogleConsumerKey, 
                                     consumer_secret=_GoogleConsumerSecret)

    #Get a Request Token        
    requestToken = gdClient.FetchOAuthRequestToken(scopes=_GoogleDataScope,
                                                   extra_parameters={'xoauth_displayname': APP_NAME})

    #Persist token secret
    self.session = Session()
    self.session[TOKENSECRETKEY]        = requestToken.secret

    gdClient.auto_set_current_token = True
    gdClient.SetOAuthToken(requestToken)
    authUrl = gdClient.GenerateOAuthAuthorizationURL(callback_url=callbackURL)
    self.redirect(authUrl)

我在https://www.google.com/accounts/ManageDomain向 Google 验证了我的域,输入了目标 URL 并使用了给定的消费者密钥/秘密。例如,如果我的域是“juno.appspot.com”,我使用http://juno.appspot.com作为目标 url 路径前缀。

该过程正在运行;但是,Google 会在黄色安全框中向用户显示此消息:

“将您引导至此处的应用程序声称是 'xxxxxx'。我们无法验证此声明,因为该应用程序在您的计算机上运行,​​而不是在网站上运行。我们建议您拒绝访问,除非您信任该应用程序。”

我认为我不应该收到此错误,因为我的服务器正在获取请求令牌并创建授权 URL。有没有人对如何摆脱这个警告有任何见解?

Google 的域注册有一个上传证书的选项,但我不需要这样做,因为我正在使用 OAuth 和 HMAC_SHA1 签名方法。

此外,这并不重要,但我正在通过 iPhone 上的 UIWebView 完成所有这些工作。我特别尝试在服务器端进行所有身份验证,以避免暴露我的消费者密钥/秘密。

谢谢你的任何提示:)

4

2 回答 2

3

解决了。

罪魁祸首是上面的这条线:

extra_parameters={'xoauth_displayname': APP_NAME})

为已注册的应用程序设置此值会故意向用户触发警告,如 Google 文档所示:

xoauth_displayname

(可选)标识应用程序的字符串。该字符串在 Google 的授权确认页面上显示给最终用户。对于已注册的应用程序,此参数的值会覆盖注册期间设置的名称,并且还会向用户触发无法验证身份的消息。对于未注册的应用,该参数可以让他们指定一个应用名称,对于未注册的应用,如果不设置该参数,谷歌使用oauth_callback的URL值来识别应用;如果两个参数均未设置,Google 将使用字符串“匿名”。

删除此行不再允许我使用“好”的名称代替域,但它摆脱了那个烦人的黄色框 :)

于 2011-04-03T08:41:45.717 回答
0

我不确定问题可能出在您的代码中的确切位置,但我有一个单页的oauth/appengine/gdata 示例,它至少可以让您朝着正确的方向前进。您是否尝试过直接从 iPhone/桌面浏览器导航到该站点以查看传递的消息?

希望能帮助到你。

或者,是否可能与 UIWebView 设置的用户代理有关?

于 2011-04-03T02:29:21.670 回答