2015-09-22 28 views
0

我與自定義身份驗證這裏所描述實現的Azure的移動服務定製API項目:
https://azure.microsoft.com/en-us/documentation/articles/mobile-services-dotnet-backend-get-started-custom-authentication/
和iOS的客戶端開發者之一已經提出了這個自定義登錄的消費(不使用客戶端庫)的一個問題是顯然是因爲這個401響應不符合HTTP認證協議(沒有認證挑戰報頭)。這裏的建議是不應該在這種情況下使用401,而是使用403。 有人可以在這裏詳細說明問題,以及最佳的一般方法是什麼?
401返回應該增加一些額外的頭文件嗎?爲什麼iOS會遇到麻煩?我還沒有確認AMS沒有發送標題。應該從Azure移動服務自定義登錄返回什麼HTTPResponse代碼?

+0

是否添加了在Azure中使用的所有文件? –

+0

並確保您的Azure憑據正確(AzureServiceAccount,AzureServiceAccountaccessKey,BlobUploadUrl,WebApiUrl)。 –

+0

@Mihir。這與問題無關。 – Sentinel

回答

2

HTTP 403意味着被禁止,因爲我們知道您是誰,但您無權獲取或操作此資源。我認爲這不是你的情況下的正確迴應。

HTTP 401是正確的響應,但它在響應中應該有一個WWW-Authenticate標頭,以標識用戶應驗證的方案和領域。

您需要手動將此標題添加到您的響應中。

response.Headers.WwwAuthenticate.Add(new AuthenticationHeaderValue("Basic", 
    "realm=\"" + AuthRealm + "\"")); 
+0

到目前爲止謝謝,但我需要進一步澄清。爲什麼所有的客戶端都能正常工作,但不是ios客戶端,爲什麼微軟不會在他們自己的例子中添加這個頭文件,爲什麼其他API需要在調用登錄方法時提供這個頭文件?我錯過了一些東西。 – Sentinel

+0

通常情況下,只有一個領域需要進行身份驗證,所以大多數客戶在收到401時都知道該怎麼做。也許iOS客戶端比其他客戶端更嚴格。微軟沒有在自己的例子中加入它可能是他們的疏忽。 – MvdD

+0

非常感謝迄今。我會試着進一步理解這一點,並且稍後將其標記爲正確。 – Sentinel

相關問題