python-3.x - google-api-python-client : 生成 oauth URL
问题描述
第一次使用google-api-python-client,我试图在我的授权流程中生成一个“链接”,我可以将它传递给用户让他们允许应用程序访问他们的日历,然后我需要谷歌将令牌传回我的应用程序。
目前我有这样的东西(基本上是快速入门演示中的 getcredentials() 函数,带有用户特定的令牌和 WebApplication credentials.json):
def find_creds(user_id):
creds = None
token_pickle = f'./credentials/{user_id}.token.pickle'
if os.path.exists(token_pickle):
with open(token_pickle, 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'OAUTH.json', SCOPES) # Google WebApplication.json for OAUTH
creds = flow.run_local_server(port=0)
with open(token_pickle, 'wb') as token:
pickle.dump(creds, token)
return creds
如果用户在本地运行我的应用程序,这将非常有用,但问题是它在服务器 (vm) 上提示登录,而不是将请求传递给我的用户。没有布埃诺。
用户正在通过另一个应用程序(我无法控制)访问我的应用程序,因此我无法真正为他们提供一个页面来授权该应用程序 - 尽管我可以向他们传递一个 URL/链接以进行点击。
这引入了一些新的障碍,因为用户没有在本地登录,所以我不能只是“保存”他们的授权令牌。
我试图实现的授权“流程”应该(我认为)是这样的:
- 向用户传递一个谷歌授权 URL(我不知道如何生成这个 url/链接,虽然我认为它可以通过
google_auth_oauthlib.flow.InstalledAppFlow
类来完成。也许使用 authentication.url?) - 用户授权应用访问有限范围(日历)
- 谷歌将用户令牌返回给我的应用程序(我想这需要通过返回 URi 来完成?所以我认为我的服务器需要运行 apache 并运行一个监听器来相应地收集/存储凭据)
在迈出第一步时,我已经陷入困境。我怀疑我的flow
对象需要更改,但我很难找到有关以下内容的文档InstalledAppFlow
:
听起来我在正确的轨道上吗?InstalledAppFlow
任何有关或课程的帮助/提示(或文档)google.oauth2.credentials
也会有所帮助。到目前为止,我已经阅读了google-auth-library-python并没有弄清楚。
解决方案
推荐阅读
- r - R:R中的世界银行数据与导出到csv之间的数据不一致
- r - 为向量元素分配与前一个匹配值相关的值
- python - GP 回归模型为所有测试输入预测非常相似的数字
- java - Spring Boot在包含签名的jar文件时启动缓慢
- marklogic - 数组的 TDE 标量类型
- laravel-5 - 通过 Postman 调用 API 调用工作正常,但当被网页调用时,它陷入困境并返回失败
- c# - 如何在 WPF 中更改 listviewitems 突出显示的颜色
- java - 如何使用弹簧靴使用自定义验证器保存具有字段的对象?
- c++ - Visual Studio - Imread 系统找不到指定的文件
- r - 如何在这个回归图中跨十分位数添加中值?