从命令行简化google身份验证的库。

googleautoauth的Python项目详细描述


概述

从命令行应用程序运行时,google api oauth授权过程非常复杂:

  1. 开发者:从google客户端工具请求一个url。
  2. 开发人员:向用户提供url并让他们在浏览器中打开它。
  3. 用户:登录。
  4. 用户:确认工具能够访问用户的数据。
  5. google:授权门户提供代码/令牌。
  6. 用户:在命令行向工具提供代码。
  7. 开发者:使用令牌对google进行最终授权。

工具还必须定期更新其授权(每当到达到期时间戳时)。

此工具消除了大部分步骤:

  1. 开发者:提供开发者的客户端身份信息。
  2. US:在可用端口上创建临时Web服务器。
  3. us:构建一个以本地web服务器作为重定向uri的url。
  4. 美国:在默认的web浏览器中打开google认证门户。
  5. 用户:在浏览器中确认请求。
  6. google:授权并重定向到本地临时web服务器(将授权令牌作为参数传递)。由于google不需要直接与web服务器对话(浏览器只需重定向到localhosturl),所以防火墙并不重要。
  7. us:临时web服务器接收并记录令牌。
  8. US:Web服务器终止,授权对象记录令牌。

注意,现在开发人员只需要实现一个步骤,用户只需要执行一个步骤。

只有在最初创建授权文件之前,交互流才是必需的。所有进一步的请求将在后台完成。

实施要求

  • 可使用交互式浏览器(如Chrome、Lynx等),并可在安装/安装过程中打开。完成后,用户必须手动关闭。
  • 授权令牌可以存储在文件系统中。

用法

流量

例如youtube api。

建立您的客户身份:

client_id = 'abc'
client_secret = 'def'

cc = googleautoauth.authorize.build_client_credentials(client_id, client_secret)

创建一个客户端管理器对象:

service_name = 'youtube'
service_version = 'v3'

scopes = [
    'https://www.googleapis.com/auth/youtube.readonly',
]

# If this is `None` or omitted, the value will either be taken from `GAA_GOOGLE_API_AUTHORIZATION_REPO_PATH` or default to '~/.googleautoauth/<hash>', where hash is calculated from the client, service, and scope info.
filepath = None

cm = googleautoauth.client_manager.ClientManager(
        service_name,
        service_version,
        cc,
        scopes,
        filepath=filepath)

示例用法:

# This will open the Google authorization portal in the browser if the
# authorization file doesn't already exist.
client = cm.get_client()

playlists = client.playlists()

request = \
    playlists.list(
        mine=True,
        part='contentDetails')

result = request.execute()
# result['kind'] == 'youtube#playlistListResponse'

可以缓存clientmanager对象,但不能缓存由cm.get_client()返回的客户端对象。此调用将根据需要自动续订API授权。

命令行工具

为了方便起见,提供了一个命令行工具(gaa_authorize)来预先创建授权。这可用于确保不会从程序流触发交互式创作。

该工具还可用于获取url(-u),该url可用于手动获取令牌,然后在本地手动注册它(-t)。

示例用法:

$ gaa_authorize "service name" "service version" "(client ID)" "(client secret)" --scope "(scope 1)" --scope "(scope 2...)" -u
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=872980721285-bk2f9bk1r1j6tmo5k9ndbia4ef6nmi80.apps.googleusercontent.com&access_type=offline

$ gaa_authorize "service name" "service version" "(client ID)" "(client secret)" --scope "(scope 1)" --scope "(scope 2...)" -t 4/zXaFbTbevyn3zEizMiRdY0GVb3BM7XBUqbGdJhi8Fh8

注释

  • 默认情况下,第一个可用的打开端口用于web服务器(然后在重定向url中传递给google)。您可以通过将特定端口设置为gaa_webserver_port来使用该端口。

测试

运行测试:

$ ./test.sh

测试需要用户与浏览器交互。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像