0

我正在使用Microsoft.Owin.Security.Google(version 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 会征求用户的以下同意: 在此处输入图像描述

这完全有道理,因为我openid profile email在 URL 中请求范围:

https://accounts.google.com/o/oauth2/auth?scope=openid个人资料 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

然后我接受,一切正常。

现在,在我注销后,再次重新进行身份验证 - 从现在开始,谷歌一直在询问我“离线访问”:

在此处输入图像描述

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

确认 URL 看起来不错:

https://accounts.google.com/o/oauth2/auth?scope=openid个人资料 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(导致错误“提示的参数值无效:无效提示:自动”)
  3. 尝试添加access_type=online(即使这是默认设置,如果未提供)。
  4. 尝试添加approval_prompt=auto

这些技术都没有奏效。

有任何想法吗?

4

2 回答 2

0

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

于 2016-01-08T00:51:39.737 回答
0

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

如果您不要求这样做,那么它听起来像是 OWIN Google 组件或 Google API 中内置的东西。

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

于 2016-01-08T09:58:33.537 回答