Google API:使用 oauth2client.client 从刷新令牌获取凭据

2024-03-14

我正在使用google官方oauth2client.client来访问google 加上API。我有一个存储在数据库中的刷新令牌(不会过期),并且需要 从中重新创建临时“凭据”(访问令牌)。

但我无法找到一种方法来使用谷歌提供的官方库来做到这一点。

所以我绕过了它:使用 urllib 访问 API,它给了我一个新的 来自refresh_token的access_token。使用 access_token 然后我可以使用该库。

我肯定错过了什么!

from apiclient import discovery
from oauth2client.client import AccessTokenCredentials
from urllib import urlencode
from urllib2 import Request , urlopen, HTTPError
import json

# ==========================================

def access_token_from_refresh_token(client_id, client_secret, refresh_token):
  request = Request('https://accounts.google.com/o/oauth2/token',
    data=urlencode({
      'grant_type':    'refresh_token',
      'client_id':     client_id,
      'client_secret': client_secret,
      'refresh_token': refresh_token
    }),
    headers={
      'Content-Type': 'application/x-www-form-urlencoded',
      'Accept': 'application/json'
    }
  )
  response = json.load(urlopen(request))
  return response['access_token']

# ==========================================

access_token = access_token_from_refresh_token(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN)

# now I can use the library properly
credentials = AccessTokenCredentials(access_token, "MyAgent/1.0", None)
http = credentials.authorize(httplib2.Http())
service = discovery.build('plus', 'v1', http=http)
google_request = service.people().get(userId='me')
result = google_request.execute(http=http)

I use: oauth2client.client.GoogleCredentials http://oauth2client.readthedocs.io/en/latest/source/oauth2client.client.html#oauth2client.client.GoogleCredentials

    cred = oauth2client.client.GoogleCredentials(access_token,client_id,client_secret,
                                          refresh_token,expires_at,"https://accounts.google.com/o/oauth2/token",some_user_agent)
    http = cred.authorize(httplib2.Http())
    cred.refresh(http)
    self.gmail_service = discovery.build('gmail', 'v1', credentials=cred)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google API:使用 oauth2client.client 从刷新令牌获取凭据 的相关文章

随机推荐

  • 如何在Python中模拟链式函数调用?

    我正在使用mock http www voidspace org uk python mock 由 Michael Foord 编写的库 用于帮助我在 django 应用程序上进行测试 我想测试我是否正确设置了查询 但我认为我不需要实际访问
  • Release 文件夹中的 vshost.exe 文件?

    为什么会为我的应用程序的发布版本生成 appname vshost exe 文件 我可能会补充一点 我正在使用外部 dll 库和一些不安全的代码 更有趣的是 我从 Release 文件夹启动的应用程序无法正常工作 从 Debug 文件夹启动
  • 自动在firestore索引中添加索引

    Can i 自动地添加索引在火库索引 我的应用程序使请求过滤器 and refers to 火库 for 显示结果 但如果firestore无法显示结果 在控制台中我看到link to 火库 for 添加索引 所以如果我push on th
  • 必须在 ConnectionDriverName 属性中指定 JDBC Driver 或 DataSource 类名“如何解决?”

    概述 这是我的第一个关于 Websphere 7 Server JPA 1 0 EJB Derby Database 的教程 第一 我的数据源名称是EJB3BANK 我的目标数据库是SHOP 第二 这个持久性 xml file
  • DropBoxManager 用例?

    我注意到一个DropBox管理器 http d android com reference android os DropBoxManager html自 FroYo API 8 以来已在 Android API 中引入 它看起来像是一个替
  • 简单测试 Spring Boot 安全性

    我正在努力测试受 Spring Security 保护的 URL 的访问控制 配置如下 http authorizeRequests antMatchers api user user authenticated antMatchers a
  • 如何加密 iPhone 上的 CoreData 内容

    我想将一些信息静态加密存储在 iPhone 应用程序上 我是 iPhone 开发新手 对 CoreData 以及它如何与视图集成不太熟悉 我的数据为 JSON 但我可以轻松地将其放入 SQLITE3 数据库或任何其他支持数据格式中 我将采用
  • Bootstrap 导航栏通知徽章

    我正在建立一个网站 允许用户互相发送消息 我使用 AJAX 收到了许多新消息 因此 我只需要找到一种方法来显示badge在用户的导航栏中 这是我想要实现的目标 我想要badge将使用创建 span class badge badge pil
  • ng-bootstrap 日期选择器不工作

    我正在尝试在我的 angular2 项目中使用 ng bootstrap 日期选择器 但出现以下错误 There is no directive with exportAs set to ngbDatepicker 这是我的代码
  • 从 URL 插入图像

    以下代码适用于大多数图像 URL 但对于此特定 URL 我收到错误 Sub test Sheets 1 Shapes AddPicture https images na ssl images amazon com images M MV5
  • 如何将侦听器附加到列表视图?

    我有一个ListView每行都有一个自定义布局TextView和三个EditText 当我单击其中的单个行时ListView一项活动启动后会将您带到另一页面 我写了一些代码 但它不起作用 代码如下所示 在适配器类 getView 方法中 我
  • Picasso 从其 URI 加载可绘制资源

    我必须展示一个drawable from res进入一个ImageView 在此应用程序中 出于某些原因我使用毕加索 在这种情况下 我需要加载drawable使用它的 URI 而不是它的 id 为此 这是我的代码 uri Uri parse
  • 如何将多个文件作为单独的数据帧读取并在列上执行计算?

    我计算单个股票的回报如下 data pd read csv r file csv data index data Date data Return data AAPL pct change 1 100 data out put Date A
  • 接收 gcm 推送通知时刷新活动

    Update GCM https developers google com cloud messaging 已弃用 请使用FCM https firebase google com docs cloud messaging How to
  • 如何覆盖温莎城堡中注册的组件?

    我刚刚开始使用 Windsor 所以请温柔点 我有一个场景 我希望能够覆盖 替换放置在 Windsor 容器内的组件 继续阅读 在我的产品代码中 我希望能够注册一个实现基类的组件 并使用容器来解析实现者 到目前为止 使用 container
  • 如何在 cypress 中测试错误请求

    我正在使用不正确的凭据测试 cypress 中的 POST 方法的日志记录 这会返回 400 个错误请求 我需要对其进行测试 这就是我所拥有的 describe Login API Test Correct user login gt it
  • 如何使用 pandas.assign 从 pandas DataFrame 索引创建新列

    我正在尝试使用 pandas 分配方法创建一个新列 该列从 Dataframe 索引中派生其值 我真的很想使用分配函数来实现所需的输出 我该怎么做呢 提前致谢 import pandas as pd df pd DataFrame 1 2
  • 新的 WPF 窗口仅显示在原始窗口下方

    在我的 WPF 应用程序中 主窗体上有一个 ListView 用于显示数据集中的绑定数据 当用户双击 ListView 中的一行时 会打开一个详细信息窗口 在我的 XAML 中 我使用了一种样式在列表视图上创建双击处理程序
  • 从 php 向 ajax 发送错误消息

    我正在尝试从 php 向 ajax 发送 通知 或错误消息 我正在努力实现这样的目标 php if myString Send stringIsEmpty error to ajax else if myString foo Send st
  • Google API:使用 oauth2client.client 从刷新令牌获取凭据

    我正在使用google官方oauth2client client来访问google 加上API 我有一个存储在数据库中的刷新令牌 不会过期 并且需要 从中重新创建临时 凭据 访问令牌 但我无法找到一种方法来使用谷歌提供的官方库来做到这一点