2012-11-16 63 views
0

我正嘗試使用AFNetworking設置的授權標頭在我的Python服務器上進行身份驗證。在我的要求去做,我把我的AFNetworking的客戶是這樣的:如何閱讀服務器上的AFNetworkings授權標頭?

// global.globalAFHTTPClient is my AFclient in this case 
[global.globalAFHTTPClient setAuthorizationHeaderWithUsername:global.userEmail 
password:global.password]; 

在服務器上,我可以訪問這樣的標題:

self.request.headers['Authorization'] 

我的問題則是,在服務器,怎麼就我是否從授權標題中提取用戶名和密碼?我需要先解碼Base64編碼嗎?我是否像字典一樣處理標題?

這是正確的方法嗎?

authorizationHeader = self.request.headers['Authorization'] 
username = authorizationHeader['username'] 
password = authorizationHeader['password'] 
+0

當你嘗試時發生了什麼?標題實際上是什麼樣子? – kindall

+0

@kindall這是頭文件的樣子:「基本KG51bGwpOihndWxsKQ ==」這是什麼意思? – zakdances

回答

0

你需要首先進行解碼。在你的例子中,你只需要解碼「KG51bGwpOihndWxsKQ ==」。這應該解碼爲格式爲'username:password'的字符串。

可能有一些庫可以爲你做到這一點,但它取決於你的服務器堆棧。

+0

標題的值如下所示:「Basic KG51bGwpOihndWxsKQ ==」因此,我需要首先在字符串的開頭去掉「Basic」嗎? – zakdances

+0

是的,'基本'只是表示授權方法。 –

+0

好吧,我使用「授權= authorizationHeader.split()[1]」之前,我解碼它與「base64.b64decode(授權)」,現在我得到「(空):(空)」作爲結果。更接近但仍然不正確。 – zakdances