当我尝试使用 XOAUTH2 机制和服务帐户连接到 Gmail IMAP 服务器时,我收到以下响应:
{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"}
我在 PHP 中使用的代码是:
$email = "an_user@of_a_domain.com";
require_once 'GoogleApiClient/Google_Client.php';
$client = new Google_Client();
$client->setUseObjects(true);
$gac = new Google_AssertionCredentials(
"xxxxxxxxxxx@developer.gserviceaccount.com",
'https://mail.google.com/',
file_get_contents("path/to/private/key"),
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
$email
);
$client->setApplicationName("Test App");
$client->setAssertionCredentials($gac);
$client::$auth->refreshTokenWithAssertion();
$token = $client::$auth->getAccessToken();
$authStr = base64_encode("user=" . $email . "\1auth=Bearer " . $token . "\1\1");
$response = send_command_to_imap("TAG1 AUTHENTICATE XOAUTH2 " . $authStr);
按照http://www.limilabs.com/blog/oauth2-gmail-imap-service-account的说明,我授权访问邮件。(当然,然后在我的测试域中重新安装了该应用程序)但我仍然失败了。
我可以得到令牌,但无法向 IMAP 进行身份验证。
我还尝试使用服务帐户访问非域谷歌用户的 Gmail IMAP(访问令牌包括“offline_token”) - 它对我来说效果很好!
有谁知道我做错了什么?