【问题标题】:Google OAuth access token expiration in MVC app?MVC应用程序中的Google OAuth访问令牌过期?
【发布时间】: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


    【解决方案1】:

    哦,我终于明白了:) 对于那些感兴趣的人 - 刷新令牌只会发出一次,当您进入同意屏幕时,您必须单击是。

    因此,为了获得刷新令牌,请转到您的帐户设置,帐户权限:https://security.google.com/settings/security/permissions

    并撤消您在 Google Developers Console 中配置的项目的访问权限:https://console.developers.google.com/project

    现在,在调用 AuthorizeAsync 后在下一行放置一个断点,在调试模式下重新启动应用程序,获得请求权限的同意屏幕,单击接受。

    应用程序将返回 VS 并在您的断点处停止。

    现在,在某处记录 result.Credential.Token.RefreshToken 值,它是一个加密字符串。

    为了简单起见,我将我的应用设置在 web.config 中。

    现在,我只需将该值赋回 result.Credential.Token.RefreshToken = refreshToken;

    而且每次访问令牌过期时都会自动刷新。

    就像这里当我调用 GmailService request.Execute(...) 传递包含令牌的凭据对象时,令牌将被刷新。

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2015-11-26
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2013-05-26
      • 2012-04-05
      • 1970-01-01
      • 2014-11-20
      相关资源
      最近更新 更多