当前位置: 首页 > 知识库问答 >
问题:

如何获得Google oauth2刷新令牌?

於永寿
2023-03-14

下面的代码使用Google oauth2机制登录用户。我们需要在用户离线时处理用户日历的更新,所以我们最终需要“刷新令牌”。grantOfflineAccess()的结果是否返回刷新令牌(在下面,我可以看到response.code包含一个可能是刷新令牌的值)?

我如何获得一个刷新令牌,可以用来(服务器端)创建新的访问键,以便离线访问用户的谷歌日历?

<script type="text/javascript">
    function handleClientLoad() {
        gapi.load('client:auth2', initClient);
    }

    function initClient() {
        gapi.client.init({
            apiKey: 'MY_API_KEY',
            clientId: 'MY_CLIENT_ID.apps.googleusercontent.com',
            discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest'],
            scope: 'https://www.googleapis.com/auth/calendar'
        }).then(function () {
            var GoogleAuth = gapi.auth2.getAuthInstance();
            GoogleAuth.signIn();
            GoogleAuth.grantOfflineAccess().then(function (response) {
                var refresh_token = response.code;
            });
        });
    }

</script>

<script async defer src="https://apis.google.com/js/api.js"
        onload="this.onload=function(){};handleClientLoad()"
        onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>

共有1个答案

太叔灿
2023-03-14

从JavaScript中获取刷新令牌有问题是有原因的。原因是这是不可能的。

JavaScript是一种客户端编程语言,要使其工作,您必须将客户机id和客户机机密与刷新令牌一起嵌入代码中。这将对任何在web页面上创建视图源的人都是可见的。

我想你知道为什么这可能是个坏主意。主要问题是GAPI不会返回它,这个库只是没有这个能力(这并不是说我已经在原始JavaScript中尝试过,如果我问得好,OAuth服务器是否会返回它)。

 类似资料:
  • 如何使用java SDK获得Microsoft图形刷新令牌?我用的是java SDK的图形,得到了访问令牌。如何使用此AccesStoken在java SDK中获得刷新令牌?

  • 我想使用谷歌作为OIDC协议的id提供商。我有一个简单的应用程序。它启动,正确地重定向到谷歌,然后返回到应用程序,打印用户详细信息并将其存储在会话中。但是,这种身份验证似乎来自id令牌,并且只有1h的过期时间 我的YML:

  • 我已经用Jhipster创建了微服务(Spring Boot)应用程序(有网关微服务keybeat),还配置了keybeat。 一切正常,但我在注销应用程序中遇到了问题,当我从UI中点击注销API时,它只会从网关注销(不会破坏Keyclope会话) 注意:服务器没有在浏览器上保存任何cookie,除了JSESSIONID 我需要从KeyClope注销用户会话。为此,我浏览了以下链接 通过Keycl

  • 我正在编写一个应用程序,调用来自Flutter的google fit rest api。 我需要使用(https://pub.dev/packages/google_sign_in)与谷歌签名。我可以毫无问题地获得一个令牌(见是否有人设法从谷歌登录(Flutter)获得id令牌),但如何获得一个新的令牌时,它是过期的? 我不想要求用户每小时登录并获得一个新的令牌

  • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。