我正在使用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会要求用户同意:
这是完全合理的,因为我在网址中请求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一直要求我“离线访问”:
我没有要求离线访问范围,因为谷歌要求这个问题感到困惑?
确认网址看起来不错:
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。
我试过了:
&prompt=auto
(导致错误“提示参数值无效:提示无效:自动”)access_type=online
(即使这是默认设置,如果没有提供)。approval_prompt=auto
这些技术都没有奏效。
有什么想法吗?
答案 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