当前位置: 首页 > 知识库问答 >
问题:

如何在GAE/Python上进行'access_type=offline'/server-only OAuth2操作?

弓举
2023-03-14

正如OAuth2.0解释演示文稿所描述的,OAuth2.0解决了以下问题:

  • 构建服务...
  • ...由用户访问...
  • ...并从第三方访问用户的数据。

这就是@oauth_required的摘要,它做得很好(目前我的应用程序“工作”:如果我触发刷新页面,我会被要求授权我的应用程序访问我的youtube数据,其余的就在后面)。但那不是我想要的!我的应用程序做了一些更简单的事情,每天用我的凭据创建一个youtube播放列表,而不需要任何用户输入。因此,与上面的3层信息相比,我想:

    null

脱机访问和使用刷新令牌部分完全有意义,但停留在一般的HTTP级别。作为一个新手,我不知道如何将这些原则集成到我的Python代码中,也没有找到任何示例Python代码....
→有人能帮我举一个Python示例来说明如何以及在哪里使用这个标志吗?

...特别是,在学习了oauth2client.appengine.oauth2decorator.oauth_required之后,我仍然不确定我是否可以根据我的情况进行调整,或者我是否应该做我自己的事情。
→你认为呢?

感谢您抽出时间;如果需要,我也会在irc://irc.freenode.net/#appengine上作为ronj

共有1个答案

田焕
2023-03-14

在检索令牌时,脱机访问是默认的;您可能已经在出现的OAuth对话框中注意到了这一点:

在不使用应用程序时执行这些操作

当用户在用decorator.oauth_required修饰的方法中接受OAuth对话框时,该用户的凭据将存储在datastore中,包括刷新令牌。

import httplib2
http = credentials.authorize(httplib2.Http())
from oauth2client.appengine import CredentialsModel
from oauth2client.appengine import StorageByKeyName
credentials = StorageByKeyName(
     CredentialsModel, user_id, 'credentials').get()

如果一个用户已经授权了您的客户端ID,那么在您随后为这些用户执行OAuth时,他们将不会看到OAuth对话框,也不会给您一个刷新令牌。只有在通过OAuth对话框时才能给出刷新令牌,但是由于用户已经授权了您的客户端ID,规范假定您已经有了一个刷新令牌。

当开发人员测试OAuth时,经常会出现这种情况,因为他们将使用一个测试帐户经历多次流,在接受第二次、第三次、第四次……之后,他们永远不会看到刷新令牌。解决这个问题的一个简单方法是使用approval_prompt=force作为oauth2decorator构造函数的参数。这将强制在每次为用户执行OAuth时显示OAuth对话框。

但是,这不会导致每次为给定用户提供请求时对话框都显示出来;这将是一个糟糕的用户体验。取而代之的是,来自请求的sacsidcookie可用于(客户机库和一些App Engine库)确定当前用户是谁。一旦库知道了当前用户,它就可以从数据存储库中获取该用户的现有存储令牌/凭据,并且不需要任何不和谐的对话框。

 类似资料:
  • 我正试图改变我们对。NET客户端库的旧的rest调用,我有两个相关的问题/问题... 此页面上的示例应用程序https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth 使用AuthorizeAsync让用户批准授权,然后将凭据保存在某个地方.... 在稍后的时间点上,您想要做一些脱机的事情,为此。,它有以下内容 我

  • 问题内容: 我正在尝试使用websocket调整我的应用程序以使其在GAE上运行,但是在阅读文档时,我没有找到解决此问题的漂亮方法。 使用一个像这样的非常简单的应用程序:https : //github.com/marcosbergamo/gae-nodejs- websocket 这是我尝试使用的示例演示。但是,当我尝试连接到我的websocket时会收到此错误; 跟随有关请求的图像; 问题答案

  • 问题内容: 在Python中scp文件的最pythonic方式是什么?我知道的唯一路线是 这是一种骇客,并且在类似Linux的系统之外不起作用,并且需要Pexpect模块的帮助来避免出现密码提示,除非你已经为远程主机设置了无密码的SSH。 我知道Twisted的,但是我希望避免通过低级ssh模块自己实现scp。 我知道,一个支持SSH和SFTP的Python模块;但它不支持SCP。 背景:我正在连

  • 问题内容: 我有一个DataFrame熊猫来的: 输出: 现在,我要遍历该框架的行。对于每一行,我希望能够通过列名访问其元素(单元格中的值)。例如: pandas有可能这样做吗? 我发现了类似的问题。但这并不能给我我所需的答案。例如,建议在那里使用: 要么 但是我不了解对象是什么以及如何使用它。 问题答案: DataFrame.iterrows是产生索引和行的生成器

  • 问题内容: 假设我的清单很大,并且正在执行如下操作: 我的问题有两个: 有很多东西 api.my_operation需要永远返回 我想使用多线程一次启动一堆api.my_operations,以便我可以一次处理5或10甚至100个项目。 如果my_operation()返回一个异常(因为也许我已经处理过该项目),那就可以了。它不会破坏任何东西。循环可以继续到下一个项目。 注意 :这适用于Pytho

  • 问题内容: 我有一长行代码,我想在多行中分解。我使用什么,语法是什么? 例如,添加一串字符串, 并分成两行,如下所示: 问题答案: 线路是什么?你可以在下一行中使用参数而不出现任何问题: 否则,你可以执行以下操作: 查看样式指南以获取更多信息。 从示例行中: 要么: 请注意,样式指南指出,最好使用带括号的隐式连续符,但是在这种特殊情况下,仅在表达式周围加上括号可能是错误的方法。