我已压缩并上传了一个Python库O365,用于访问AWS Lambda-Layer中的MS Outlook日历。我可以导入它,但是问题是授权。当我在本地测试时,使用 FileSytemTokenBackend 生成了承载令牌并将其存储在本地txt文件中。
但是当我使用图层将其加载到AWS Lambda时,它再次要求复制粘贴URL流程,而该流程无法从图层令牌文件中获取。 而且我尝试过 FireSystemTokenBackend ,但这也无法成功配置。在测试功能时,我已在本地使用此Token storage docs。
我的问题是如何使用本地生成的令牌文件存储和验证我的帐户。因为在AWS Lambda中, input()功能在运行时引发错误。 我如何将该令牌文件保留在aws lambda中并在不进行身份验证的情况下使用它?
答案 0 :(得分:2)
我也遇到过同样的问题。 lambda文件系统是临时的,因此,每次运行该函数时,您都需要执行自动处理,而o365 lib将要求提供URL。 因此,请尝试将令牌(o365_token.txt)保存在S3中,而不是将其保存在lambda文件系统中,并使用此令牌进行身份验证。 我希望这段代码对您有帮助:
import boto3
bucket_name = 'bucket_name'
# replace with your bucket name
filename_token = 'o365_token.txt'
# replace with your AWS credentials
s3 = boto3.resource('s3',aws_access_key_id='xxxx', aws_secret_access_key='xxxx')
# Read the token in S3 and save to /tmp directory in Lambda
s3.Bucket(bucket_name).download_file(filename_token, f'/tmp/{filename_token}')
# Read the token in /tmp directory
token_backend = FileSystemTokenBackend(token_path='/tmp',
token_filename=filename_token)
# Your azure credentials
credentials = ('xxxx', 'xxxx')
account = Account(credentials,token_backend=token_backend)
# Then do the normal authentication process and include the refresh token command
if not account.is_authenticated:
account.authenticate()
account.connection.refresh_token()