2016-01-07 70 views
0

我正在使用Microsoft.Owin.Security.Google(版本3.0.1)middlware向我的應用提供Google OAuth。Google OAuth2要求「離線訪問」

它的配置,像這樣:

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

很簡單的東西。我使用IdentityServer作爲MW來發布索賠。

當我第一次驗證與谷歌的用戶,谷歌要求從下列用戶同意: enter image description here

這非常有意義,因爲我在請求的URL openid profile email範圍:

https://accounts.google.com/o/oauth2/auth?scope=openid檔電子郵件& RESPONSE_TYPE =代碼& 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

然後我接受,並且一切正常。

現在,我退出後,然後再重新進行身份驗證 - 在谷歌從現在開始一直問我了「脫機訪問」:

enter image description here

我還沒有問脫機訪問範圍,所以困惑Google爲什麼要這樣做?

確認URL看起來不錯:

https://accounts.google.com/o/oauth2/auth?scope=openid檔電子郵件& RESPONSE_TYPE =代碼& 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. 啓用Google+ API在API控制檯
  2. 嘗試添加&prompt=auto(導致錯誤 「無效參數值用於提示:無效提示:汽車」)
  3. 嘗試添加access_type=online(即使這是默認的,如果沒有提供)。
  4. 嘗試添加approval_prompt=auto

沒有這些技術已經奏效。

任何想法?

回答

0

似乎是本地主機問題。一旦部署到服務器,工作正常:/

+0

我與谷歌相同的經驗和本地主機 –

0

offline_access範圍值請求OAuth 2.0刷新令牌。

如果您不要求這樣做,那麼這聽起來像是內建在OWIN Google組件或Google API中的東西。

您可以在此處詳細瞭解離線訪問範圍:http://openid.net/specs/openid-connect-core-1_0.html#OfflineAccess

+0

謝謝,但就像我說我不是請求訪問(查看我的網址參數)。我沒有在google owin MW中配置任何額外的功能。無論如何,我認爲這是一個本地主機問題 – RPM1984

+0

我對Google和localhost有同樣的體驗 –