我们有一个使用Google Sign-In进行身份验证的Web服务器并授权API访问(Classroom) . 我们需要登录部分,因此我们使用init()和signIn() . 我们不能使用authorise() . 此外,我们不会使用特定范围登录,因为我们只需要识别正常使用情况 .
登录用户可以启用一项功能,该功能需要代表他/她的帐户离线访问Google Classrom API . 我们使用两个与Classroom相关的范围调用grantOfflineAccess()来获取身份验证代码,该代码将在以后存储 .
在服务器端,我们有一个gRPC服务,它没有't expose any web front-end. We'使用C#/ .NET与Google API Client libraries .
我实现了一个 IDataStore
,它可以通过使用上面的代码调用AuthorizationCodeFlow.ExchangeCodeForTokenAsync来响应 TokenResponse
请求,或者返回存储在数据库中的最后一个 TokenResponse
. 当使用新版本调用(嗯,"if") IDataStore.StoreAsync
时(通常在需要进行令牌刷新之后),它会再次将其保存在数据库中 .
我的问题是 ExchangeCodeForTokenAsync
给我一个没有 refresh_token
的 TokenResponse
. 这意味着 access_token
仅在60分钟内有效 . 我需要在服务调用级别拦截异常以再次调用 ExchangeCodeForTokenAsync
(如果可行!),而不是依赖于谷歌API客户端库处理自动刷新所有 .
什么可能阻止 ExchangeCodeForTokenAsync
给我一个 refresh_token
?
谢谢 .
1 回答
好吧,我在this other question找到了答案 .
我只是从Google帐户的授权应用中删除了我的应用,然后我的下一个
ExchangeCodeForTokenAsync
电话给了我一个refresh_token
.