如何在 .net google api v3 中刷新令牌?
How to refresh token in .net google api v3?
我设法在前端获得 access_token 和 refresh_token,现在将其存储在数据库中,在后端 .netcore 应用程序中,我使用 [=15 创建 google 凭据=]
var cred=googleCredential.fromAccessToken(access_token);
但是这个不会自行刷新,我不知道如何刷新它。我可以向他们的其余 api 发送 post 请求并刷新它,但我需要知道“信用”何时过期才能发送该刷新请求。 PS 知道令牌在数据库中,因此不能使用 .fromaccesstoken 以外的任何选项。
编辑:
完整的代码无法共享,但应用程序的流程是这样的。在 reactJS 应用程序上,我通过 react-google-login module
获得授权码
<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"
/>
这个returns一个授权码作为唯一的响应主体,这个响应然后与另一个端点在前端交换刷新和访问令牌,这些令牌被发送到存储它们的后端端点在数据库中。现在服务器端可以通过
创建一个google凭证对象
this.googleCredentials=GoogleCredential.FromAccessToken(this.googleAccessToken);
唯一的问题是它不能自行处理刷新,因此您必须以某种方式实现它。
因为当通过 fromtoken(ACCESS_TOKEN)
创建 GoogleCredentials
对象时我找不到另一种刷新方式,所以我所做的是发送一个 post 请求和我的刷新令牌必须到后端的其余端点并获得一个新的 access_token。
面临的另一个问题是找出访问令牌何时过期,找不到解决方案。但它 returns 在我的案例中通过驱动器服务创建驱动器文件夹时出现 401 异常
var res = await this.driveService.Files.Create(folder).ExecuteAsync()
此处 res
将引发异常,我只是将其放在 try
块中并通过 catch
和 运行 中的 http 请求获取新的访问令牌再次声明(提示:recursion
)
希望这对任何人都有帮助,但欢迎提出更好的解决方案。请理解,这将是一个从数据库读取刷新令牌的后端解决方案。
我设法在前端获得 access_token 和 refresh_token,现在将其存储在数据库中,在后端 .netcore 应用程序中,我使用 [=15 创建 google 凭据=]
var cred=googleCredential.fromAccessToken(access_token);
但是这个不会自行刷新,我不知道如何刷新它。我可以向他们的其余 api 发送 post 请求并刷新它,但我需要知道“信用”何时过期才能发送该刷新请求。 PS 知道令牌在数据库中,因此不能使用 .fromaccesstoken 以外的任何选项。
编辑: 完整的代码无法共享,但应用程序的流程是这样的。在 reactJS 应用程序上,我通过 react-google-login module
获得授权码<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"
/>
这个returns一个授权码作为唯一的响应主体,这个响应然后与另一个端点在前端交换刷新和访问令牌,这些令牌被发送到存储它们的后端端点在数据库中。现在服务器端可以通过
创建一个google凭证对象this.googleCredentials=GoogleCredential.FromAccessToken(this.googleAccessToken);
唯一的问题是它不能自行处理刷新,因此您必须以某种方式实现它。
因为当通过 fromtoken(ACCESS_TOKEN)
创建 GoogleCredentials
对象时我找不到另一种刷新方式,所以我所做的是发送一个 post 请求和我的刷新令牌必须到后端的其余端点并获得一个新的 access_token。
面临的另一个问题是找出访问令牌何时过期,找不到解决方案。但它 returns 在我的案例中通过驱动器服务创建驱动器文件夹时出现 401 异常
var res = await this.driveService.Files.Create(folder).ExecuteAsync()
此处 res
将引发异常,我只是将其放在 try
块中并通过 catch
和 运行 中的 http 请求获取新的访问令牌再次声明(提示:recursion
)
希望这对任何人都有帮助,但欢迎提出更好的解决方案。请理解,这将是一个从数据库读取刷新令牌的后端解决方案。