从命令行简化google身份验证的库。
googleautoauth的Python项目详细描述
概述
从命令行应用程序运行时,google api oauth授权过程非常复杂:
- 开发者:从google客户端工具请求一个url。
- 开发人员:向用户提供url并让他们在浏览器中打开它。
- 用户:登录。
- 用户:确认工具能够访问用户的数据。
- google:授权门户提供代码/令牌。
- 用户:在命令行向工具提供代码。
- 开发者:使用令牌对google进行最终授权。
工具还必须定期更新其授权(每当到达到期时间戳时)。
此工具消除了大部分步骤:
- 开发者:提供开发者的客户端身份信息。
- US:在可用端口上创建临时Web服务器。
- us:构建一个以本地web服务器作为重定向uri的url。
- 美国:在默认的web浏览器中打开google认证门户。
- 用户:在浏览器中确认请求。
- google:授权并重定向到本地临时web服务器(将授权令牌作为参数传递)。由于google不需要直接与web服务器对话(浏览器只需重定向到localhosturl),所以防火墙并不重要。
- us:临时web服务器接收并记录令牌。
- 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
测试需要用户与浏览器交互。