2012-08-14 71 views
2

在获得一些帮助here后,我一直在使用Google-bigquery和JavaScript一段时间,我意识到您需要与项目关联的Google登录详细信息授权和实现你想要做的事情。使用JavaScript的服务器到服务器应用程序的OAuth 2.0

我想实现的目标: - 允许用户访问我的页面并查看数据。例如我可能会根据天气预报一些公共数据,所以我不需要任何用户的认证,

目前研究&发展的旨意,我使用我使用的Web服务器应用程序的OAuth 2.0,我想摆脱这种,因为我们不需要任何用户数据,除了有我的项目的客户ID电子邮件ID等..

我已经阅读OAuth 2.0 for Server to Server Applications,并有不似乎是任何支持JavaScript,因此最终用户不必参与。

有没有解决这个或安全快速解决,我试图从这个sample改变配置代码,看看会发生什么,但没有运气 -

var config = { 
      'client_id' : 'xxxxxxxxxxx.apps.googleusercontent.com', 
      "iss" : "[email protected]", 
      "scope" : "https://www.googleapis.com/auth/bigquery", 
      "aud" : "https://accounts.google.com/o/oauth2/token", 
      "exp" : 1328554385, 
      "iat" : 1328550785 
     }; 

什么我这里缺少的。

在此先感谢您提供任何帮助和建议,我一直在为此努力工作。

回答

3

由于无法在客户端JavaScript代码中隐藏客户端密钥,因此无法授权客户端JavaScript应用程序通过服务器到服务器的OAuth流使用BigQuery。

在这种情况下,唯一的解决方案是使用服务器端代理来处理来自JavaScript应用程序的API调用。以下是如何通过AppEngine代理查询调用的代码片段(请注意:下面的代码对任何用户都是开放的,它会执行任何检查以确保调用正在通过特定的JavaScript客户端运行)。

import httplib2 

from apiclient.discovery import build 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 
from oauth2client.appengine import AppAssertionCredentials 

# BigQuery API Settings 
SCOPE = 'https://www.googleapis.com/auth/bigquery' 
PROJECT_ID = 'XXXXXXXXXX' # REPLACE WITH YOUR Project ID 

# Create a new API service for interacting with BigQuery 
credentials = AppAssertionCredentials(scope=SCOPE) 
http = credentials.authorize(httplib2.Http()) 
bigquery_service = build('bigquery', 'v2', http=http) 


class StartQueryHandler(webapp.RequestHandler): 
    def post(self): 
    query_string = self.request.get('query') 
    jobCollection = bigquery_service.jobs() 
    jobData = { 
     'configuration': { 
     'query': { 
      'query': query_string, 
     } 
     } 
    } 
    try: 
     insertResponse = jobCollection.insert(projectId=PROJECT_ID, 
              body=jobData).execute() 
     self.response.headers.add_header('content-type', 
             'application/json', 
             charset='utf-8') 
     self.response.out.write(insertResponse) 
    except: 
     self.response.out.write('Error connecting to the BigQuery API') 


class CheckQueryHandler(webapp.RequestHandler): 
    def get(self, job_id): 
    query_job = bigquery_service.jobs() 
    try: 
     queryReply = query_job.getQueryResults(projectId=PROJECT_ID, 
              jobId=job_id).execute() 
     self.response.headers.add_header('content-type', 
             'application/json', 
             charset='utf-8') 
     self.response.out.write(queryReply) 
    except: 
     self.response.out.write('Error connecting to the BigQuery API') 


application = webapp.WSGIApplication(
            [('/startquery(.*)', StartQueryHandler), 
            ('/checkquery/(.*)', CheckQueryHandler)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 
+0

非常感谢提示 – shabeer90 2012-08-16 09:17:57

相关问题