欢迎访问宙启技术站
智能推送

使用from_client_secrets_file()函数读取客户端秘钥文件并获取访问GoogleAPI的令牌

发布时间:2023-12-24 00:31:27

from_client_secrets_file()函数是Google Auth库中的一个方法,用于从客户端秘钥文件中读取信息并创建一个认证流程。

在使用该函数之前,首先需要从Google开发者平台创建一个项目,并添加所需的API,并下载客户端秘钥文件(JSON格式)。

下面是一个使用from_client_secrets_file()函数的例子:

import google.auth
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/drive.readonly']

def get_access_token():
    # 读取客户端秘钥文件并创建认证流程
    flow = InstalledAppFlow.from_client_secrets_file(
        'client_secret.json', scopes=SCOPES)
    
    # 从缓存中获取令牌
    credentials = None
    if google.auth.credentials.Credentials.from_authorized_user_file('token.json').valid:
        credentials = google.auth.credentials.Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # 如果缓存中没有有效令牌,则执行认证流程获取令牌
    if not credentials or not credentials.valid:
        if credentials and credentials.expired and credentials.refresh_token:
            credentials.refresh(Request())
        else:
            # 启动认证流程获取授权码,并在浏览器中进行身份验证
            authorization_url, _ = flow.authorization_url(access_type='offline')
            print('请在浏览器中打开以下URL完成身份验证:
{}'.format(authorization_url))
            authorization_code = input('请输入授权码:')
            # 执行认证流程以换取令牌
            flow.fetch_token(authorization_response=authorization_code)
            credentials = flow.credentials
        
        # 将令牌保存到文件中,以便下次使用
        with open('token.json', 'w') as token_file:
            token_file.write(credentials.to_json())
    
    # 返回访问令牌
    return credentials.token

# 获取访问令牌
access_token = get_access_token()
print('Access Token:', access_token)

在上述代码中,首先我们定义了要访问的Google API的作用域(SCOPES),这里以Google Drive为例,我们只需要drive.readonly的访问权限。

然后,我们实现了一个函数get_access_token(),该函数首先尝试从缓存中获取令牌(token.json文件),如果存在有效令牌,则直接返回该令牌。

如果缓存中没有有效令牌,则使用from_client_secrets_file()方法读取客户端秘钥文件(client_secret.json),并创建一个认证流程。

然后,我们检查从缓存中获取的令牌是否有效,如果无效,则执行认证流程以获取新的令牌。具体来说,我们使用了InstalledAppFlow类创建一个认证流程,并使用authorization_url()方法获取授权URL,在浏览器中打开URL进行身份验证,并将返回的授权码输入到程序中。然后,我们调用fetch_token()方法,传入授权码,执行认证流程以换取令牌,并将返回的令牌保存到文件中。

最后,我们通过调用token的token()方法获取访问令牌,并打印出来。

需要注意的是,这里的客户端秘钥文件和令牌文件的路径需要根据实际情况进行修改。

总结起来,使用from_client_secrets_file()函数可以方便地读取客户端秘钥文件,并创建认证流程以获取访问Google API所需的令牌。