【问题标题】:How to refresh token in .net google api v3?如何在.net google api v3 中刷新令牌?
【发布时间】:2021-02-10 11:23:00
【问题描述】:

我设法在前端获取了 access_token 和 refresh_token,现在将其存储在数据库中,在后端 .netcore 应用程序上我创建了 googlecredential

var cred=googleCredential.fromAccessToken(access_token);

但是这个不会自己刷新,我不知道如何刷新。我可以向他们的 rest api 发送一个发布请求并刷新它,但我需要知道“creds”何时过期才能发送该刷新请求。 PS 知道令牌在数据库中,因此不能使用 .fromaccesstoken 以外的任何内容。

编辑: 无法共享完整的代码,但这是应用程序的流程。在 reactJS 应用程序中,我通过 react-google-login 模块获取授权码

<GoogleLogin
                  
                  clientId="xxx"
                  buttonText="Login"
                  onSuccess={this.responseGoogle}
                  onFailure={this.responseGoogle}
                  cookiePolicy={"single_host_origin"}
                  scope="https://www.googleapis.com/auth/drive.readonly"
                  accessType="offline"
                  prompt="consent"
                  responseType="code"
                />

这将返回一个授权码作为唯一的响应正文,然后此响应与另一个端点一起用于在前端交换刷新和访问令牌,这些令牌被发送到将它们存储在数据库中的后端端点。现在服务器端可以通过

创建一个googlecredential对象
this.googleCredentials=GoogleCredential.FromAccessToken(this.googleAccessToken);

唯一的问题是它不能自己处理刷新,所以你必须以某种方式实现它。

【问题讨论】:

  • 我很想看看您的代码,了解您如何将其存储在数据库中。您在使用 google .net 客户端库吗?您可能需要向它提供刷新令牌,并且它应该能够请求新的访问令牌。我认为它都存储在会话中,因此您不需要将其存储在数据库中。
  • 我已经添加了信息。 PS令牌只是短暂的,我想稍后用它来访问驱动器联系人等
  • 访问令牌仅在一个小时内有效,您应该从刷新令牌构建凭据。

标签: c# asp.net-core google-api google-drive-api google-oauth


【解决方案1】:

由于当GoogleCredentials 对象通过fromtoken(ACCESS_TOKEN) 创建时我找不到另一种刷新方式,所以我所做的是发送一个带有刷新令牌的发布请求,我必须向后端的其余端点发送并获取一个新的 access_token。 面临的另一个问题是找出无法找到解决方案的访问令牌何时过期。但在我的情况下,它在通过驱动器服务创建驱动器文件夹时返回 401 异常

var res = await this.driveService.Files.Create(folder).ExecuteAsync()

这里res 将引发异常,我只是将它放在try 块中并通过catch 中的http 请求获取新的访问令牌并再次运行该语句(提示:recursion

希望这对任何人都有帮助,但我们欢迎提出更好的解决方案。请理解,这将是一个从数据库读取 refreshtoken 的后端解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2015-06-19
    • 2013-09-28
    • 2016-01-26
    • 2021-07-11
    • 2016-08-03
    • 2020-02-06
    相关资源
    最近更新 更多