Созданный токен доступа к учетной записи службы Gmail с помощью JWT не работает, возвращает

#jwt #google-oauth #access-token #service-accounts #preconditions

Вопрос:

Я пытаюсь создать JWT, чтобы получить токен доступа для учетной записи службы Gmail для использования в сценарии предварительного запроса почтальона. Но я получаю ниже возврата после запуска https://oauth2.googleapis.com/token:

 {
    "access_token": "ya29.c.KqMBDQikl6jLqi-sFp0UlCB17UYVDrIakjYL5c4JKjQWYwOqRchLVLXl4VzYI6_MuRoH2rT7LESJgWyCD7jZsR1uOxzfNcWT3vivjsY7DjhMuOK8UQweuA9Ay2w_mqk-JjM7U8dXGhMVtah9aTxrI-ibdDL8e3TcmIW9xWL1Ep5vFwWGB8qV2XGA7ZkhA7PDT06FxQMIRieub628t-DiNTDM1VaxBw.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
    "expires_in": 3599,
    "token_type": "Bearer"
}
 

Это похоже на маркер полного доступа, и поле области не возвращается.
Сценарий предварительного запроса, который я использую, я загружаю с http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js.

     var navigator = {};
    var window = {};
    eval(pm.environment.get("jsrsasign-js"));
    console.log(KJUR)
    var scope = pm.environment.get('scope');
    var iss = pm.environment.get('iss');
    var privateKey = pm.environment.get('privateKey');

    const header = {"alg" : "RS256", "typ" : "JWT"};

    const claimSet =
    {
      "iss": iss,
      "scope": scope,
      "aud":"https://oauth2.googleapis.com/token",
      "exp":KJUR.jws.IntDate.get("now   1hour").toString(),
      "iat": KJUR.jws.IntDate.get("now").toString()
    }

    var jwt = KJUR.jws.JWS.sign(null, header, claimSet, privateKey);

     pm.environment.set('jwt', jwt);
 

Когда я совершаю вызов API Gmail с возвращенным маркером доступа, например https://www.googleapis.com/gmail/v1/users/:user_mailbox/messages, он возвращается,

 {
    "error": {
        "code": 400,
        "message": "Precondition check failed.",
        "errors": [
            {
                "message": "Precondition check failed.",
                "domain": "global",
                "reason": "failedPrecondition"
            }
        ],
        "status": "FAILED_PRECONDITION"
    }
}
 

Гуру,
Не могли бы вы помочь проверить, в чем проблема и как ее устранить? Спасибо.

Комментарии:

1. Вам следует проверить исходный код для google api node.js клиентская библиотека это может дать вам некоторые подсказки о том, как они управляют аутентификацией учетной записи службы. Вы также найдете ряд вопросов, подобных этому, на SO, я еще не видел ни одного, где бы кто-нибудь заставил это работать.