Google OAuth2要求“离线访问”

时间:2016-01-07 22:11:15

标签: .net google-oauth2 identityserver3 scopes owin-middleware

我正在使用Microsoft.Owin.Security.Google(版本3.0.1)middlware向我的应用提供Google OAuth。

它的配置如下:

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions
{
    AuthenticationType = "Google",
    Caption = "Google",
    SignInAsAuthenticationType = signInAsType, // "idsrv.external"
    ClientId = "xxx.apps.googleusercontent.com",
    ClientSecret = "xxx"
});

非常简单的东西。我使用IdentityServer作为MW来发布声明。

当我首次使用Google对用户进行身份验证时,Google会要求用户同意: enter image description here

这是完全合理的,因为我在网址中请求openid profile email范围:

  

https://accounts.google.com/o/oauth2/auth?scope=openid个人资料电子邮件& response_type = code& redirect_uri = https://localhost:44301/core/signin-google&state=xxx&client_id=111.apps.googleusercontent.com&hl=en-GB&from_login=1&as=-25fb4219b2997893&authuser=0

然后我接受,一切顺利。

现在,在我退出后,再次重新验证 - 从现在开始,Google一直要求我“离线访问”:

enter image description here

我没有要求离线访问范围,因为谷歌要求这个问题感到困惑?

确认网址看起来不错:

  

https://accounts.google.com/o/oauth2/auth?scope=openid个人资料电子邮件& response_type = code& redirect_uri = https://localhost:44301/core/signin-google&state=xxx&client_id=111.apps.googleusercontent.com&hl=en-GB&from_login=1&as=676f55265a78c036&authuser=0

与第一个请求完全相同的URL。

我试过了:

  1. 在API控制台中打开Goog​​le+ API
  2. 尝试添加&prompt=auto(导致错误“提示参数值无效:提示无效:自动”)
  3. 尝试添加access_type=online(即使这是默认设置,如果没有提供)。
  4. 尝试添加approval_prompt=auto
  5. 这些技术都没有奏效。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

似乎是localhost问题。部署到服务器后,工作正常:/

答案 1 :(得分:0)

offline_access范围值请求OAuth 2.0刷新令牌。

如果您没有请求此功能,那么它听起来就像OWIN Google组件或Google API中内置的内容。

您可以在此处详细了解离线访问范围:http://openid.net/specs/openid-connect-core-1_0.html#OfflineAccess