首页 文章

在Google上使用Google进行身份验证(javascript),在服务器上使用(.NET)

提问于
浏览
0

我们有一个使用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_tokenTokenResponse . 这意味着 access_token 仅在60分钟内有效 . 我需要在服务调用级别拦截异常以再次调用 ExchangeCodeForTokenAsync (如果可行!),而不是依赖于谷歌API客户端库处理自动刷新所有 .

什么可能阻止 ExchangeCodeForTokenAsync 给我一个 refresh_token

谢谢 .

1 回答

  • 0

    好吧,我在this other question找到了答案 .

    refresh_token仅在用户的第一次授权时提供 . 后续授权(例如您在测试OAuth2集成时所使用的类型)将不会再次返回refresh_token . :)

    我只是从Google帐户的授权应用中删除了我的应用,然后我的下一个 ExchangeCodeForTokenAsync 电话给了我一个 refresh_token .

相关问题