首页 > 解决方案 > 如何在.net google api v3 中刷新令牌?

问题描述

我设法在前端获取了 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);

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

标签: c#asp.net-coregoogle-apigoogle-drive-apigoogle-oauth

解决方案


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

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

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

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


推荐阅读