2014-03-18 17 views
6

我跟着引導驗證用戶。如果我將服務發佈到Azure,我也可以對用戶進行身份驗證。但我希望能夠測試在本地驗證用戶。如何才能做到這一點?不能與本地.NET後端

我正在使用Live ID,並且在Web.config中設置了正確的ClientID和ClientSecret。當我嘗試從客戶端調用LoginAsync時,調用將失敗,並顯示請求無法完成。 (不允許的方法)

** 更新2014年3月20日 **

基於卡洛斯和亨裏克的意見,我已經更新了我的本地服務來查找正是像我的服務器實例。我遵循Scot Hanselmans excellent guide,現在我的服務在端口80 端口443上本地運行,並帶有完全有效的SSL證書。它甚至運行在完全相同的https://xxxx.azure-mabile.net主機名上。

通過這些更改,現在在運行應用程序與本地計算機或在Azure上運行應用程序之間沒有任何配置差異。我可以在瀏覽器中訪問https://xxxx.azure-mabile.net,重定向到Live登錄,登錄併成功重定向回服務。在瀏覽器中它一切正常。但它仍然無法在應用程序中工作。

我附加了調試器,將CLR錯誤設置爲「拋出時中斷」,並且我設法在服務中捕獲異常。下面是我在即時窗口中看到:

Immediate Window

的響應特性是無益的。它不提供任何有關該問題的其他信息。

脫穎而出對我的唯一的事情是,應用程序試圖做一個POST/登錄/ microsoftaccount,而瀏覽器通常會做一個GET在這個地址(然後被重定向) 。

** 以下Henriks指南remote debugging我能夠加載符號,並獲得微小更多位信息更新#2 2014年3月20日 **

後:

「的現有連接被遠程主機強制關閉「

錯誤代碼爲10054(WSAECONNRESET)由對等方重置連接。

看起來,實時身份驗證服務器可能會強制終止連接,但只有當我與應用程序進行身份驗證時。再一次,瀏覽器內的驗證很好。這與/login/microsoftaccount是來自應用程序的POST事實似乎暗示了我從LiveClient.LoginAsync獲取的身份驗證令牌存在問題。我會做更多的挖掘...

+0

如果你進入瀏覽器並嘗試使用「https://」而不是'http://'登錄,它還能工作嗎?如果我沒有記錯,Windows 8應用程序中的身份驗證需要通過HTTPS完成。 – carlosfigueira

+0

謝謝卡洛斯。這似乎沒有解決它。我已經更新了上面的問題,並且已經使用有效的可信證書在端口443上本地完全啓用了HTTPS。這仍然不起作用。 –

+0

我也試過,沒有運氣。我還配置了外部訪問issexpress [鏈接](http://stackoverflow.com/questions/3313616/iis-express-enable-external-request),輸入客戶端密鑰和客戶端的密碼web.config和添加客戶端和服務器的網址到谷歌的開發人員儀表板。提琴手顯示「invalid_client」。 – martinoss

回答

0

目前,它被設置爲當您在本地運行時不需要身份驗證從本地主機訪問服務。在這種情況下,匿名訪問被允許(這當然在雲中運行時被禁用)。

我們真的沒有辦法讓您在本地進行身份驗證,因爲重定向URI不起作用(他們無法指向本地主機,因爲Facebook沒有辦法解決「localhost」問題)。

一種選擇是,我們以某種方式可以在本地模擬身份驗證,併爲您提供一個令牌,而無需與各種身份提供程序連接。我不確定究竟是什麼樣子,但我們可以考慮。

亨裏克

+0

感謝Henrik。我明白,在本地運行時不需要身份驗證,但我需要能夠唯一標識用戶。我的服務爲每個用戶存儲了大量信息,並且不知道他們是誰擊敗了應用程序的目的。所以關於身份驗證的認證要少得多。 當您得到片刻時,請查看我上面提問的更新。我的本地服務現在使用有效的證書在80和443上運行。這也是「模仿」我的azure-mobile.net網址,所以Facebook不必重定向到本地主機。可悲的是,它仍然無法正常工作。 –

+0

你有沒有找到解決方法或解決方法?就像你我並不需要「認證」任何人一樣,儘可能多地測試認證用戶的情況,以確保他們正確地連接到他們的應用程序中的數據。是在實時應用程序上進行遠程調試的唯一方法來測試這一點,我必須建立它的盲目? – SelAromDotNet

0

你有沒有也許在你實時連接項目設定Mobile client app: Yes?我認爲該設置旨在用於Live Connect SDK(客戶端)流程,而不是基於瀏覽器的(服務器)流程。 .NET後端不支持客戶端流。

您還需要確保在客戶端上使用LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount)來觸發服務器流。

+0

我很確定我用這種方式嘗試過,但我可以再次測試。你是否認爲將其設置爲「否」應該使其使用GET而不是POST來登錄LoginController?您能否提供有關這兩種登錄流程之間差異的更多信息? Windows 8應用程序如何使用基於服務器的登錄流而不是客戶端登錄流? –

+0

只是將其更改爲false並嘗試再次登錄。方法不允許的錯誤。看起來它仍然在嘗試執行POST。 –

+0

我懷疑你可能在客戶端上使用了錯誤的登錄方法,請參閱我的編輯。 –