Google OAuth2 请求 "offline access"

Google OAuth2 asking for "offline access"

我正在使用 Microsoft.Owin.Security.Google(版本 3.0.1)中间件为我的应用程序提供 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 要求用户同意以下内容:

这完全有道理,因为我在 URL:

中请求 openid profile email 范围

https://accounts.google.com/o/oauth2/auth?scope=openid profile email&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 一直要求我 "offline access":

我没有要求离线访问范围,很困惑为什么 Google 要求这个?

确认 URL 看起来不错:

https://accounts.google.com/o/oauth2/auth?scope=openid profile email&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 控制台中打开 Google+ API
  2. 尝试添加 &prompt=auto(导致错误 "Invalid parameter value for prompt: Invalid prompt: auto")
  3. 尝试添加 access_type=online(如果未提供,即使这是默认设置)。
  4. 尝试添加 approval_prompt=auto

None 这些技术奏效了。

有什么想法吗?

似乎是本地主机问题。一旦部署到服务器,工作正常:/

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

如果您不要求这样做,那么这听起来像是 OWIN Google 组件或 Google API.

中内置的东西

您可以在此处阅读有关离线访问范围的更多信息:http://openid.net/specs/openid-connect-core-1_0.html#OfflineAccess