我可以安全地公开一些XOAuth身份验证信息吗?

时间:2018-02-27 11:29:55

标签: email oauth-2.0 gmail phpmailer

我正在使用带有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";

我的问题是,oauthClientIdoauthClientSecret公开的风险是什么?由于其中一个主题被称为&#34; secret&#34;,感觉不推荐,但我正在寻找一个比这更具体的答案。如果我发布这些账户,我的GMail账户是否有风险?第三方的GMail帐户是否存在风险?

用例

我的用例如下。我正在建立一个提供表单到电子邮件程序(例如联系表单)的服务,并将它们部署到属于第三方的Web服务器。我有一个向导UI,可以从中收集数据,并在最后按下发布按钮。理想情况下,我希望选择使用GMail帐户的用户浏览我已设置的Google同意屏幕,因此该用户的流程非常简化。

另一种选择是他们必须在Google Developers界面中创建自己的OAuth2条目(请参阅前面链接中的屏幕截图),并添加T&amp; C和隐私政策链接,当真正的东西是我的工作,而不是他们的工作!

我可能需要在Google中选择一个不同的身份验证系统(它们也提供简单的API密钥)但我不知道它将如何与PHPMailer一起使用。

1 个答案:

答案 0 :(得分:1)

如果您的邮件程序后端想要使用GMail代表其用户发送电子邮件,则它将具有OAuth2客户端的角色,并且用户将是资源所有者。因此邮件程序后端将始终使用自己的clientId和客户端密钥,只需使用不同的访问令牌即可发送电子邮件。工作流程如下:

  1. Mailer后端检测到它需要访问(或刷新)令牌。它会向浏览器发送重定向响应(到Google的/auth OAuth2端点)。它使用Authorization code grant flow,因为它需要刷新令牌。
  2. 用户获得身份验证并接受同意。
  3. 浏览器会被重定向到邮件程序后端的重定向网址以及授权码。
  4. 邮件程序后端交换代码以进行刷新和访问令牌。刷新令牌是一个长期存在的令牌,因此可以保存以供进一步使用。
  5. 邮件程序后端将刷新令牌传递给PHPMailer以发送电子邮件。