【问题标题】:Google Auth - Always prompt for authorization, what should I do with the refresh token?Google Auth - 总是提示授权,我应该如何处理刷新令牌?
【发布时间】:2019-02-02 05:39:07
【问题描述】:

我目前正在 nodejs 服务器上发现 OAuth 标识,以便通过 api youtube 上的查询对其进行测试。

现在,它有效,我可以提出请求。我只有两件事有问题。

首先,每次我登录时,Google 都会请求许可,即使它已经被授予(并且该许可在我帐户上允许的应用程序中可见)。

根据这个答案 “login with google always asks user consent”,这不应该发生,尽管我在本地工作。

我的第二个问题可能会帮助我回答第一个问题。当我研究 OAuth 时,我了解到刷新令牌的存在,它应该允许在过期时创建新的访问令牌。

我只是不知道是否由我来使用刷新令牌,或者库是否在发出请求时自行执行?

我的基础是: https://developers.google.com/youtube/v3/quickstart/nodejs

每个会话都与一个包含令牌和所有客户端信息的 OAuth2Client 相关联

[现状]

刷新令牌由库处理,如 Rubén 所示 here。 每次提示仍然没有答案。

【问题讨论】:

    标签: node.js google-oauth google-authentication


    【解决方案1】:

    按照该快速入门,当您通过授权时,您将调用getToken

    oauth2Client.getToken(code, function(err, token) {
       if (err) {
          console.log('Error while trying to retrieve access token', err);
          return;
       }
       oauth2Client.credentials = token;
       storeToken(token);
       callback(oauth2Client);
    });
    

    token 对象响应包含 access_token 和 refresh_token。 refresh_token 仅在您第一次登录时返回(token expires 可以获取新的),您需要存储它以生成新的访问令牌。

    您还可以在示例中看到,在authorize 函数中,您需要检查您之前是否存储过您的令牌。

    然后,要使用 refresh_token 你需要调用:

    oauth2Client.setCredentials({
       refresh_token: YOUR_STORED_REFRESH_TOKEN
    });
    

    使用 refresh_token 设置凭据后,access_token 会自动更新,您可以使用 oauth2client 再次发出请求。

    我希望它很清楚!

    参考:https://developers.google.com/identity/protocols/OAuth2WebServer#offline

    【讨论】:

    • 谢谢,但 refreshAccessToken 最近已被弃用,这让我觉得它现在是自动完成的?您认为这有助于提示还是仅对长时间会话令牌(> 1 小时)有帮助。
    • 你是对的,它似乎是自动完成的,as explained here。我相信您需要处理何时显示提示,如果用户已经登录,您需要检查他们的刷新令牌是否已存储以及是否可以使用它们生成访问令牌。一旦您检查了这一点,这意味着用户已通过身份验证,您可以提出请求。
    • 好吧,万一用户真的断开/忘记了服务器,但仍然在谷歌帐户允许的应用程序中:重新连接不应该显示授权请求,而是直接重定向到redirect_url是吗?
    • 对,如果用户同意使用该应用程序,重定向不应显示提示,应继续执行
    • 既然我更了解茶点,我会进一步研究这个问题。
    猜你喜欢
    • 2017-09-29
    • 2016-05-30
    • 2016-10-13
    • 2017-10-10
    • 2018-06-23
    • 2019-12-22
    • 1970-01-01
    • 2018-07-18
    • 2012-10-14
    相关资源
    最近更新 更多