當我們的網站是mywebsite.azurewebsites.net,谷歌ouath工作正常。MVC谷歌ouath與Azure網站域問題
但是,現在當我們在Azure門戶中添加一個域以映射到網站時,當同一用戶使用google oauth登錄時,它無法識別它並要求註冊。在註冊時,它會拋出一個錯誤,指出用戶已經存在。
不確定自從我們向我們的網站添加域後發生了什麼變化。
當我們的網站是mywebsite.azurewebsites.net,谷歌ouath工作正常。MVC谷歌ouath與Azure網站域問題
但是,現在當我們在Azure門戶中添加一個域以映射到網站時,當同一用戶使用google oauth登錄時,它無法識別它並要求註冊。在註冊時,它會拋出一個錯誤,指出用戶已經存在。
不確定自從我們向我們的網站添加域後發生了什麼變化。
當您使用Google對某人進行身份驗證時,您可以從Google獲得兩件事情:1)用戶標識符,它是一些神祕的字符串和用戶的電子郵件地址或名稱。現在這個用戶標識符對於每個站點都是不同的,所以如果我在站點A使用我的Google帳戶登錄,我會得到一些標識符,但是如果我在站點B中使用我的Google帳戶登錄,我會得到一個不同的標識符。
請檢查此標識符是如何連接到註冊引擎的。由於您更改了域名,因此嘗試登錄的同一用戶將獲得不同的標識符。如果註冊引擎首先檢查該用戶是否是註冊用戶,由於標識符不同,它將指示用戶未註冊並因此將用戶重定向到註冊頁面。現在,如果註冊引擎檢查用戶的電子郵件(在兩種情況下都是相同的)重複註冊,那麼它會拋出您當前正在獲取的錯誤。
我可能在這裏完全錯誤,因爲我沒有看過代碼。如果是這樣,請讓我知道,我會刪除這個答案。
UPDATE
所以我有機會玩這個,它確實與標識符的問題。我開始在VS 2013中創建一個簡單的MVC應用程序,並在那裏啓用Google身份驗證。我讓應用程序在其默認端口上運行。我去了谷歌,得到了自己的認證,並被重定向到了應用程序。正如預期的那樣,它要求我註冊我所做的。
然後我改變了運行應用程序的端口(它早些時候運行在50902
上,我將它改爲在50903
上運行)。當應用程序運行時,我點擊登錄並再次選擇Google。正如預期的那樣,它將我重定向到Google的網站,並在那裏對自己進行身份驗證。然而,當我重定向到應用程序時,它要求我再次註冊。註冊箱已預先填寫了我的名字。當我點擊提交時,我收到了消息Username already taken
(這是您遇到的問題)。
然後我看着應用程序數據庫尤其AspNetUserLogins
表,發現這兩個條目:
現在第一項是當應用程序運行在端口50902,第二個是當它跑50903.從截圖中可以看出,Google返回了不同的ProviderKey
。
,這裏是從AspNetUsers
表的截圖:
正如你所看到的,我不得不改變用戶名從GauravMantri
到GauravMantri1
第2項作爲第一個用戶名已經採取了即使兩個我使用同一帳戶登錄Google的次數。
如果您更新到最新的Microsoft.Owin.Security.Google nuget包(v2.1.0),您將獲得app.UseGoogleAuthentication的新重載,它允許您指定clientId和clientSecret。對兩者使用相同的值將確保您獲得一致的providerKey值,然後這些值將映射到來自多個端點的正確用戶。我使用這個功能,以便我可以在www.example.com和api.example.com之間共享登錄信息。例如,每 Startup.Auth.cs應包含相同的片段:
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
ClientId = "999999999999-99999999999999999999999999999999999.apps.googleusercontent.com",
ClientSecret = "XxX-zzzzzzzzzzzzzzzz",
CallbackPath = new PathString("/Account/LoginCallback/"),
};
// restrict the retrieved information to just signin information
googleOAuth2AuthenticationOptions.Scope.Add("openid");
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
我也建議諮詢關於「OpenID的」選項此相關的問題:ASP.Net Identity provider requesting too much info。
另外,請注意,您必須使用console.developers.google.com將單個Google clientId和clientSecret配置爲識別您的所有重定向URI。這意味着每個主機名/端口組合加上/帳戶/ LoginCallback /需要列出。
您使用的是Azure ACS嗎?如果是這樣,您需要指定具有新域的適當依賴方。 – ramiramilu
當你說'註冊時它會拋出一個錯誤說用戶已經存在' - 這是否發生在你的網站或Google的網站上? –
不,我不是。我正在使用MVC5中的內置oauth功能。 – WaZ