Я включил учетную запись службы из консоли Google API для выполнения two-legged OAuth
для совершения звонков в API Google Analytics. Я использую JavaScript и следил за pure JavaScript implementation of JWT and JWS, чтобы сгенерировать подписанный JWT и сделать вызов HTTP/REST для токена, как описано в этом guide. Как только я делаю POST
с encodedURL, я получаю ошибку 400 ":" invalid_grant ". «error_description»: «Плохой запрос»Ответ на токен Oauth2 «invalid_grant» с JAPT от GoogleAPI
Я прочитал несколько сообщений, чтобы включить это письмо, а не client_id
. Я убедился, что это так, и с тех пор Google обновил свою Документацию.
Любые идеи? Я также отправлю код, если это необходимо, но я в основном следовал за Rothrock в этом link.
Я попробовал подписанный JWT на http://jwt.io/, и он говорит, что это недопустимая подпись. payload
и header
декодируют правильно. Есть ли способ проверить подпись после кодирования с помощью закрытого ключа, предоставленного консолью Google API?
Вот мой код:
var pHeader = {"alg":"RS256", "typ":"JWT"};
var sHeader = JSON.stringify(pHeader);
var pClaim ={};
pClaim.iss = "(ServiceAccount_Email_Address).apps.googleusercontent.com";
pClaim.scope = "https://www.googleapis.com/auth/analytics.readonly";
pClaim.aud = "htps://www.googleapis.com/oauth2/v3/token";
pClaim.exp = KJUR.jws.IntDate.get("now + 1hour");
pClaim.iat = KJUR.jws.IntDate.get("now");
var sClaim = JSON.stringify(pClaim);
var key = "-----BEGIN PRIVATE KEY----- Private Key from JSON file ----END PRIVATE KEY-----";
var sJWS = KJUR.jws.JWS.sign('RS256', sHeader, sClaim, key);
var urlEncodedData = '';
var urlEncodedDataPairs = [];
var token;
urlEncodedDataPairs.push("grant_type" + '=' + "urn:ietf:params:oauth:grant-type:jwt-bearer");
urlEncodedDataPairs.push("assertion" + '=' + sJWS);
urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g,'+');
$(function(){
$.ajax({
type: "POST",
url: 'https://www.googleapis.com/oauth2/v3/token',
data: urlEncodedData,
dataType: 'JSON',
contentType: 'application/x-www-form-urlencoded',
success: function(result){
console.log(JSON.stringify(result));
}
});
});
Так что я должен удалить 25 экземпляров «\ n» в закрытом ключе? – Brad
No Brad Вам не нужно их удалять. –