代码之家  ›  专栏  ›  技术社区  ›  nagylzs

为什么我没有从谷歌令牌端点获取刷新令牌?

  •  1
  • nagylzs  · 技术社区  · 1 年前

    我已经在谷歌开发者控制台上创建了凭据:

    • 一个API密钥(在密钥中添加blogspot API)
    • 一个oauth客户端(已配置同意屏幕)

    oauth客户端处于测试模式(尚未验证),但添加了一些测试电子邮件。

    我可以使用如下所示的授权url(客户端id,redirect_uri已更改)成功检索具有授权码授予流的访问令牌:

    https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&client_id=1234&redirect_uri=https%3A%2F%example.com%3A4430%2Fauth%2Fgoogle%2Fcallback&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fblogger&state=abcd1234

    最重要的是:

    令牌响应如下:

    {
      "access_token": "***",
      "expires_in": 3108,
      "scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/blogger openid",
      "token_type": "Bearer",
      "id_token": "***"
    }
    

    为什么我没有从令牌端点获取刷新令牌?即使指定了access_type=offline。我认为refresh_token仅在首次登录时提供,因此我尝试从隐身模式登录,但无济于事。

    是因为oauth客户端处于测试模式吗?我试图查找有关测试模式oauth客户端限制的信息,但找不到任何有关刷新令牌的信息。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Roar S.    1 年前

    我相信你需要

    access_type=offline&prompt=consent 
    

    喜欢in this answer

    正如OP所评论的

    在golang goth库中,这对应于:oauth2.AuthCodeURL(state, oauth2.AccessTypeOffline、oauth2.ApprovalForce)。名字 oauth2.ApprovalForce有点误导,它实际上补充道 提示=同意。