2016-06-14 40 views
3

我正在研究MVC 5應用程序,我需要使用Google的oAuth2進行身份驗證。有很多教程(包括輸入和一些視頻)都顯示了獲得這種設置的相同方式,但我根本無法讓他們爲我工作。所以讓我從頭開始。來自ASP.NET MVC的Google/Google +的OAuth2 5

我開始使用裏克安德森的great blog post如何獲得此設置。該博文有點過時,所以在與Google網站互動時步驟有點不同,但除了不同的導航之外,所有重要信息都在那裏,並且我能夠跟隨。這使我能夠使GOOGLEPLUS API並設置以下客戶端ID消耗: Google Client ID Settings

快進到我的代碼和我做了以下幾件事:

  1. 新的MVC應用程序(個人帳戶進行身份驗證)
  2. 啓用HTTPS(使用IISExpress現在,但我信任的證書,以保持瀏覽器高興)
  3. 配置我Startup.Auth.cs這樣:

Startup.Auth.cs:

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
    { 
     ClientId = GoogleClientId, 
     ClientSecret = GoogleClientSecret 
    }); 

在這一點上,我是能夠得到谷歌按鈕顯示在登錄屏幕上:

Google button on the Login Screen

當我點擊它,它會將我帶到Google的身份驗證/授權屏幕,我授予我的應用程序訪問我的Google帳戶信息的權限。

enter image description here

在這裏,我點擊「允許」和可悲的是,這是哪裏出了問題。但有些事情也是正確的。此時,如果我在我的Google帳戶下查看我的Connected Apps,我現在確實看到我的MVC應用程序出現了。因此,大部分情況下,Google的結局看起來不錯。但是,當我檢查的要求,紅旗彈出:

access denied error

在與一些人來說誰是比我聰明(!THX加洛韋先生),有人建議我照做this blog post。所以長話短說,我做了以下修改:

  1. 配置了我的重定向的URI谷歌API是/signin-googleplus
  2. 安裝的NuGet包:Install-Package Owin.Security.GooglePlus
  3. 修改了我的Startup.Auth.cs這樣:

Startup.Auth。CS

app.UseGooglePlusAuthentication(new GooglePlusAuthenticationOptions 
    { 
     ClientId = GoogleClientId, 
     ClientSecret = GoogleClientSecret 
    }); 

,結果是一樣的: access denied error again

在挖掘到這訪問被拒絕使用Fiddler錯誤,我可以告訴大家,從請求到/signin-google的響應,其中error=access_denied第一大作:

response redirecting to an access denied error

挖成403,我看到這樣的響應:

HTTP/1.1 403 Forbidden 
Vary: X-Origin 
Content-Type: application/json; charset=UTF-8 
Date: Tue, 14 Jun 2016 23:36:15 GMT 
Expires: Tue, 14 Jun 2016 23:36:15 GMT 
Cache-Control: private, max-age=0 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Server: GSE 
Alternate-Protocol: 443:quic 
Alt-Svc: quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25" 
Accept-Ranges: none 
Vary: Origin,Accept-Encoding 
Content-Length: 213 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "usageLimits", 
    "reason": "userRateLimitExceeded", 
    "message": "User Rate Limit Exceeded" 
    } 
    ], 
    "code": 403, 
    "message": "User Rate Limit Exceeded" 
} 
} 

我也曾嘗試這些額外的東西,以防萬一:

  • 多個谷歌帳戶(如用戶,不擁有API賬戶)
  • 無痕/的InPrivate模式,以確保高速緩存清除
  • 用戶帳戶撤銷應用程序訪問再試

我真的可以使用一些幫助得到這個從重定向回Google上班!

+0

首先:你在谷歌開發者控制檯打開的OAuth2 API?它默認關閉。 –

+0

@LukaszMakowej是的,我做到了。幾分鐘前我編輯了我的問題,澄清了這一點。 – Jaxidian

+1

第二:請在此處粘貼來自瀏覽器的完整回叫網址(撥打Google後)。可以有關於錯誤的信息 - 我不確定小提琴手是否顯示所有這些信息。 –

回答

3

我開始使用裏克安德森偉大的博客文章如何獲得此設置。

它對我很好(我認爲這是很好的解決方案),問題可能在其他地方 - 請閱讀下文。


在有幾個人誰是比我聰明的講(THX加洛韋先生!),有人建議我按照這篇博客的意見。所以長話短說,我作了如下修改:

不要使用這個,所以不能確認它是否工作。


在挖掘到這訪問被拒絕使用Fiddler錯誤,

User Rate Limit Exceeded

看起來你在你的谷歌帳戶超過極限 - 請閱讀更多關於這個在這裏:

+0

因此,我已經去過Google API網站並將我的限制設置爲最大值,並且它可以正常工作。它被設置爲每100秒25次登錄,並將其更改爲每100秒500次登錄。也就是說,**絕對沒有辦法**我在100秒內嘗試了25次登錄。我可能只在幾個小時內總共嘗試了50次登錄(沒有敲擊登錄按鈕)。這是全部手動測試,沒有自動化,只是我和其他人。對我而言,這並沒有什麼意義,爲什麼/我從一開始就達到了這個極限。 – Jaxidian

+1

是的,但限制不是登錄嘗試,它是對令牌請求(獲取/刷新),所以通常一次登錄嘗試會生成一個令牌請求,但可以生成很少的請求取決於情況。我不確定MVC OAuth中間件是如何工作的,所以不能告訴更多。也許這是中間件的問題,也可能是Google沒有自動重置你的限制。 –

+0

好吧,顯然我誤解了這裏被扼殺的東西。也就是說,Fiddler跟蹤僅向Google服務器顯示3次點擊(3個不同的端點,這正是上述鏈接中的序列圖應該發生的事情),所以我無法想象中間件(Owin)的效果很差。我想我需要深入挖掘這些配額。謝謝您的幫助! – Jaxidian