Если я пытаюсь вызвать API GMail, я получаю следующее сообщение об ошибке в ответ:Как получить доступ к API GMail из моего собственного GMail?
{
"error": {
"errors": [{
"domain": "global",
"reason": "failedPrecondition",
"message": "Bad Request"
}],
"code": 400,
"message": "Bad Request"
}
}
Сначала я генерировать маркер
var sHead = JSON.stringify({
"alg": "RS256",
"typ": "JWT"
});
var iat = timeStampf();
var exp = iat + 3600;
var sPayload = JSON.stringify({
"iss": client_email,
"sub": client_email,
"scope": "https://mail.google.com/",
"aud": "https://www.googleapis.com/oauth2/v3/token",
"exp": exp,
"iat": iat
});
var sJWS = KJUR.jws.JWS.sign("RS256", sHead, sPayload, private_key);
var paramstoken = "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=" + sJWS
getToken("POST", "/oauth2/v3/token", paramstoken, jsonData, replier);
/*rest petition
return 200 ok {
"access_token": "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M",
"token_type": "Bearer",
"expires_in": 3600
}
*/
Далее я проверить маркер
function testToken(accessToken, replier) {
var client = vertx.createHttpClient().host(urlbase).port(443).ssl(true).maxPoolSize(10);
var request = client.request("GET", "/gmail/v1/users/me/messages", function(resp) {
console.log('server returned status code: ' + resp.statusCode());
console.log('server returned status message: ' + resp.statusMessage());
resp.bodyHandler(function(body) {
replier(JSON.parse(body.toString()));
});
});
request.headers()
.set("Content-type", contentType)
.set("Authorization", "Bearer " + accessToken);
request.end();
client.close();
}
И я получаю ошибку 400 плохих запросов взамен. Но если я использую другую область, например Google+, я получаю 200 баллов.
Я думаю, что ошибка «sub»: client_email. Я попытался добавить больше GMail в консоль Google, и с 3-мя письмами, автоматически создаваемыми для проекта, только почта от Json вернет мне неудачное предварительное условие, если попробуйте другие письма, включая авто, созданные для проекта, и мой собственный GMail (владелец проекта GMail) ошибка 401 unautorized_client.
Или мне нужен другой "grant_type Используйте следующую строку, закодированную по URL-адресу: urn: ietf: params: oauth: grant-type: jwt-bearer"?
[email protected]
[email protected]///this is de mail downloaded in json from credentials
[email protected]
(это на стороне сервера JS)
Я использую optioon 2 'Service Account' и использую это руководство https://developers.google.com/identity/protocols/OAuth2ServiceAccount –
@VictorManuel Используете домен Google App? Поскольку это единственный случай, когда вы можете получить доступ к личным данным пользователя через учетную запись службы, в противном случае вам нужно будет олицетворять пользователя посредством трехстороннего цикла OAuth, когда пользователь сначала перенаправляется на экран проверки подлинности Google по вашему сценарию, где пользователь вводит и предоставляет доступ к вашему приложению для просмотра его/ее сообщений. –
Я постараюсь с 1) веб-приложением, ty –