在 Google Apps 脚本中解码 JWT

Jac*_*ole 5 javascript google-sheets google-apps-script jwt

我正在尝试使用此函数解码 JSON Web 令牌:

function parseJwt(token) {
    var base64Url = token.split('.')[1];
    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));

    return JSON.parse(jsonPayload);
};
Run Code Online (Sandbox Code Playgroud)

这在我的 Google Chrome 控制台中运行良好,但是当我尝试在 Google 脚本中使用它时,它显示“atob 未定义”。我查了一下 atob 的作用,即解码 64 位编码字符串。但是当我使用base64Decode(String)时,它会生成一个数组而不是字符串。我怎样才能重现atob的行为?或者还有其他方法来解码 JWT?

Jac*_*ole 6

我找到了如何从https://developers.google.com/apps-script/reference/script/script-app#getidentitytoken解码 JWT

function parseJwt(token) {
    let body = token.split('.')[1];
    let decoded = Utilities.newBlob(Utilities.base64Decode(body)).getDataAsString();
    return JSON.parse(decoded);
};
Run Code Online (Sandbox Code Playgroud)