【发布时间】:2015-02-25 00:38:57
【问题描述】:
我按照此处的说明使用 Google Oauth2 编写了一个 MVC 应用程序: https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web_applications
我对访问令牌过期有疑问。访问令牌过期后,调用 Google API 时出现异常:“访问令牌已过期,但我们无法刷新”
初始认证是两次迭代机制:
第一次迭代 AuthorizeAsync 返回结果为空 Credential,并填充 RedirectUri:
所以,创建的授权url是这样的:
https://accounts.google.com/o/oauth2/auth?access_type=offline&response_type=code&client_id=MYCLIENTID&redirect_uri=http:%2F%2Flocalhost%2FHomepage%2FAuthCallback%2FIndexAsync&scope=https:%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar https:%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&state=http:%2F%2Flocalhost%2FHomepage%2F95419199
请注意 access_type=offline 存在。所以我也应该取回刷新令牌(不会发生)。
第二次迭代 - AuthorizeAsync 返回具有填充凭据和空 RedirectUri 的结果:
Question1 - 此时 RefreshToken 是否应该为空?
结果被记住,因为它被定义为静态的。
进入的下一个请求 - 需要 result.Credential 来调用 Google Calendar API 的日历操作:
Question2 - 如果访问令牌在那一刻过期(为了测试,我只设置了 ExpiresInSeconds = 0),我调用 RefreshTokenAsync 方法,但它总是返回 false!为什么?我在这里错过了什么?
当 RefreshTokenAsync 返回 false 时,正确的处理方法是什么? 当前 RedirectResult(result.RedirectUri) 命令将失败,因为 result.RedirectUri 为空。
【问题讨论】:
标签: asp.net-mvc google-oauth google-api-dotnet-client