使用googledocslistapi、Python和oauth2进行身份验证

2024-09-28 19:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python+Django和oauth2中使用googledocsapi。我通过googleapi python客户端获得了OAuth访问令牌等,代码基本上是从http://code.google.com/p/google-api-python-client/source/browse/samples/django_sample/plus/views.py复制的

现在,我想我应该使用googlegdataapi,v2.0.17。如果是这样,我就无法确切地找到如何授权使用gdata客户机进行的查询。位于http://packages.python.org/gdata/docs/auth.html#upgrading-to-an-access-token的文档(无论如何看起来都过时了),比如说将客户机上的auth\u token属性设置为gdata.oauth.OAuthToken. 如果是这样,我应该向OAuthToken传递什么参数?在

简而言之,我在寻找一个简单的示例,说明如何在给定OAuth访问令牌的情况下,授权使用gdataapi进行的查询。在


Tags: django代码tokenauthhttp客户端客户机google
2条回答

OAuth 2.0序列类似于以下内容(为已注册的应用程序提供适当定义的应用程序常量)。在

  1. 生成请求令牌。在

    token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, 
                                    client_secret=CLIENT_SECRET, 
                                    scope=" ".join(SCOPES), 
                                    user_agent=USER_AGENT)
    
  2. 授权请求令牌。对于一个简单的命令行应用程序,您可以执行以下操作:

    print 'Visit the following URL in your browser to authorise this app:'
    print str(token.generate_authorize_url(redirect_url=REDIRECT_URI))
    print 'After agreeing to authorise the app, copy the verification code from the browser.'
    access_code = raw_input('Please enter the verification code: ')
    
  3. 获取访问令牌。在

    token.get_access_token(access_code)
    
  4. 创建一个gdata客户端。在

    client = gdata.docs.client.DocsClient(source=APP_NAME)
    
  5. 授权客户。在

    client = token.authorize(client)
    

您可以保存访问令牌以备以后使用(因此避免在令牌再次过期之前必须执行手动身份验证步骤),方法是:

f = open(tokenfile, 'w')
blob = gdata.gauth.token_to_blob(token)
f.write(blob)
f.close()

下次启动时,您可以通过执行以下操作来重用已保存的令牌:

f = open(tokenfile, 'r')
blob = f.read()
f.close()
if blob:
    token = gdata.gauth.token_from_blob(blob)

然后,对身份验证序列的唯一更改是通过指定refresh_token参数将此令牌传递给OAuth2Token:

token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, 
                                client_secret=CLIENT_SECRET, 
                                scope=" ".join(SCOPES), 
                                user_agent=USER_AGENT,
                                refresh_token=token.refresh_token)

希望这有帮助。花了一段时间才弄明白:-)。在

这是来自https://developers.google.com/gdata/docs/auth/overview

Warning: Most newer Google APIs are not Google Data APIs. The Google Data APIs documentation applies only to the older APIs that are listed in the Google Data APIs directory. For information about a specific new API, see that API's documentation. For information about authorizing requests with a newer API, see Google Accounts Authentication and Authorization.

您应该同时使用OAuth进行授权和访问,或者使用OAuth 2.0进行授权和访问。在

对于OAuth 2.0,API现在位于https://developers.google.com/gdata/docs/directory。在

相关问题 更多 >