c# - 如何在.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);
唯一的问题是它不能自己处理刷新,所以你必须以某种方式实现它。
解决方案
GoogleCredentials
因为当通过fromtoken(ACCESS_TOKEN)
我所做的创建对象时我找不到另一种刷新方式,所以我向后端的其余端点发送了一个带有刷新令牌的发布请求,并获得一个新的 access_token。面临的另一个问题是找出无法找到解决方案的访问令牌何时过期。但在我的情况下,它在通过驱动器服务创建驱动器文件夹时返回 401 异常
var res = await this.driveService.Files.Create(folder).ExecuteAsync()
这里res
会引发一个异常,我只是将它放在一个try
块中并通过 http 请求获取新的访问令牌catch
并再次运行该语句(提示recursion
:)
希望这对任何人都有帮助,但更好的解决方案将受到欢迎。请理解,这将是一个从数据库读取 refreshtoken 的后端解决方案。
推荐阅读
- c# - 为什么 C# 编译器生成没有闭包的匿名委托作为实例方法,而不是作为同一类型的静态方法?
- angular - 由于 import/no-deprecated 将 angular 从 12.0.2 更新到 12.2.12 后,eslint 超级慢
- ios - 我可以在真正的 iOS 设备上从 Windows 运行 React Native 应用程序吗?
- node.js - 如何使用 Node.js 在 Firebase 中使用电子邮件身份验证
- assembly - Tc2xx Tricore 的汇编语法
- python - django问题中的产品细节和图像
- python - 从服务运行脚本时不考虑 Ulimit 值
- amazon-web-services - AWS Route53 记录更新
- python - 组合数据集并对其进行格式化 Pandas Python
- laravel - Laravel GraphQl 获取无法连接到 websocket 端点错误