使用oauth2client.py 中提供的 google 文档和 python 库以及oauth2.py 库和文档,我通过 OAuth2.0 对其进行身份验证,成功地通过用户的 gmail 帐户发送邮件。我在 google apis 中创建了一个项目,并且能够获取正确验证和发送邮件所需的密钥和其他参数。
现在我正在尝试使用 Google Marketplace 应用程序来实现相同的目标。最终目标是域管理员可以将我们的应用程序添加到他们的 Google Apps 域中,这样每个用户都不需要经过身份验证过程,并且我们的应用程序将“自动”被授权代表他们发送邮件。
第一个问题是在市场上注册应用程序时,我得到了客户端密钥和秘密,但是没有redirect_uri
,就像我在另一个项目中得到的那样。这意味着我无法使用他们的OAuth2WebServerFlow
课程进行身份验证。这导致了数小时的搜索和冲突的答案以及 Google 文档中的断开链接。该文档让我相信 Marketplace 应用程序不支持 OAuth 2.0,我需要重新使用 2 腿 OAuth 1.0 身份验证。但它是在一年前更新的,所有其他 Google 文档都强烈告诉我不要使用 OAuth 1.0,因为它已被弃用。
重写所有新代码(不能使用相同的库或任何东西)以使用 OAuth 1.0 是能够使用 Marketplace 应用程序执行此操作的唯一方法吗?是否有另一种方法,如果没有,关于利用现有代码或如何在当前系统中最好地做的任何建议?
我目前使用 OAuth 2.0 的工作方式的简短片段:
flow = OAuth2WebServerFlow(
client_id="xxx",
client_secret="xxx",
scope="https://mail.google.com/",
user_agent="mytest/0.1",
redirect_uri="http://127.0.0.1:5000/oauth2callback"
)
authorize_url = flow.step1_get_authorize_url()
并在返回
credentials = flow.step2_exchange(request.args['code'])
storage = Storage(request.user.email)
storage.put(credentials)
并发送邮件
conn = smtplib.SMTP('smtp.googlemail.com', 587)
conn.set_debuglevel(True)
conn.ehlo('test')
conn.starttls()
auth_string = 'user=%s\1auth=Bearer %s\1\1' % (user_address, credentials.access_token)
conn.docmd('AUTH', 'XOAUTH2 ' + base64.b64encode(auth_string))
header = 'To:' + recipient_address + '\n'
header += 'From:' + user_address + '\n'
header += 'Subject: Oauth test Email \n'
header += 'Content-Type: text/html; charset=UTF-8\n'
msg = header + '\n ' + "Waka waka" + ' \n\n'
conn.sendmail(user_address, recipient_address, msg)