如何从登录的Google登录(仅客户端应用)中正确获取访问令牌?

时间:2019-06-03 10:46:27

标签: javascript google-api google-oauth2 google-javascript-api

我正在使用Google登录按钮让用户使用其Google帐户登录:

    gapi.signin2.render("container-btn-google-login", {
        scope: "email profile",
        onsuccess: (user) => {
            let token = user.getAuthResponse();
            setToken(token);

            // How can I get the Access Token here
            // that should be the same as user.Zi.access_token?

            resolve(token);
        },
    });

我将调用其他Google API,并且不想使用其Javascript库(我将使用fetch来调用其REST API)。

但是,当我将Authorization: token.id_token作为标题时,该请求被拒绝。如果我手动输入一个可以从控制台(user.Zi.access_token)看到的值,那么它将起作用。

如何从Google API Javascript SDK中提取access_token?对我来说,使用像Zi这样的神秘且无证的东西似乎并不安全。

1 个答案:

答案 0 :(得分:0)

好的,我在这里找到了relevant documentation。我们可以使用user.getAuthResponse(true)来获取带有访问令牌和其他有用信息的Auth响应:

参数为includeAuthorizationData

  

可选:一个布尔值,指定是否始终返回访问权限   令牌和范围。默认情况下,访问令牌和请求的范围   当fetch_basic_profile为true(默认值)时不返回   并且不需要其他范围。

我的问题中的示例工作代码:

let token = user.getAuthResponse(true);
console.log(token.access_token)