我正在使用带有GMail的PHPMailer来发送SMTP邮件。只要帐户启用了允许更少安全应用功能,这种方法就可以正常使用。我正在开发一个系统,用户可以通过该系统授权使用他们的GMail帐户发送电子邮件。
我想尝试使用XOAuth2,这样我就不必要求用户启用 Less Secure 开关。为此,我是来自PHPMailer项目的reading these instructions。
现在,我认为这些说明是从电子邮件将从单个系统所有者控制的系统发送的角度编写的。他或她(在本例中为我)将使用自己的Gmail帐户来设置这些值:
// This is known to admin and to a single user (private) $mail->oauthUserEmail = "<your gmail address>@gmail.com";
// User cannot see these, only admin
$mail->oauthClientId = "237644427849-g8d0pnkd1jh3idcjdbopvkse2hvj0tdp.apps.googleusercontent.com";
$mail->oauthClientSecret = "mklHhrns6eF-qjwuiLpSB4DL";
然后,用户将使用自己的GMail帐户通过Google许可屏幕生成管理员代表用户使用的最终信息:
// This is known to admin and to a single user (private)
$mail->oauthUserEmail = "<your gmail address>@gmail.com";
// User cannot see these, only admin
$mail->oauthClientId = "237644427849-g8d0pnkd1jh3idcjdbopvkse2hvj0tdp.apps.googleusercontent.com";
$mail->oauthClientSecret = "mklHhrns6eF-qjwuiLpSB4DL";
// User gives this to the admin to complete the required info
$mail->oauthRefreshToken = "1/7Jt8_RHX86Pk09VTfQd4O_ZqKbmuV7HpMNz-rqJ4KdQMEudVrK5jSpoR30zcRFq6";
但是,我的用例将略有不同。我正在代表GMail帐户持有者将此应用程序部署到他们选择的Web主机上,因此基本上所有auth值(除了每用户刷新令牌)现在都可以被视为公共:
// This is known to me and to a single user (private)
$mail->oauthUserEmail = "<your gmail address>@gmail.com";
// Essentially these values would be public
$mail->oauthClientId = "237644427849-g8d0pnkd1jh3idcjdbopvkse2hvj0tdp.apps.googleusercontent.com";
$mail->oauthClientSecret = "mklHhrns6eF-qjwuiLpSB4DL";
// This is known to me and to a single user (private)
$mail->oauthRefreshToken = "1/7Jt8_RHX86Pk09VTfQd4O_ZqKbmuV7HpMNz-rqJ4KdQMEudVrK5jSpoR30zcRFq6";
我的问题是,oauthClientId
和oauthClientSecret
公开的风险是什么?由于其中一个主题被称为&#34; secret&#34;,感觉不推荐,但我正在寻找一个比这更具体的答案。如果我发布这些账户,我的GMail账户是否有风险?第三方的GMail帐户是否存在风险?
我的用例如下。我正在建立一个提供表单到电子邮件程序(例如联系表单)的服务,并将它们部署到属于第三方的Web服务器。我有一个向导UI,可以从中收集数据,并在最后按下发布按钮。理想情况下,我希望选择使用GMail帐户的用户浏览我已设置的Google同意屏幕,因此该用户的流程非常简化。
另一种选择是他们必须在Google Developers界面中创建自己的OAuth2条目(请参阅前面链接中的屏幕截图),并添加T&amp; C和隐私政策链接,当真正的东西是我的工作,而不是他们的工作!
我可能需要在Google中选择一个不同的身份验证系统(它们也提供简单的API密钥)但我不知道它将如何与PHPMailer一起使用。
答案 0 :(得分:1)
如果您的邮件程序后端想要使用GMail代表其用户发送电子邮件,则它将具有OAuth2客户端的角色,并且用户将是资源所有者。因此邮件程序后端将始终使用自己的clientId和客户端密钥,只需使用不同的访问令牌即可发送电子邮件。工作流程如下:
/auth
OAuth2端点)。它使用Authorization code grant flow,因为它需要刷新令牌。