Native Web App 的登入三兩事…
混合式 APP 的登入問題
通常在 app 開發應用上大多會考慮到操作的一致性,在選擇時往往都會向 Native App 或是 Mobile Web 的方式靠邊站。
但,當考量到時效性或是管理性時,也許一時之間會選擇 Web 用 APP 包一層起來的混合模式。
當然,無論選擇 Native app 或是 mobile web 都不會有所謂的在那裡登入的問題,但若是混合模式的話,大家可能就會考慮在 app 統一登入而不是在 Web 上的 Native Web App 。
而在 8.0 的版本中要幫使用者登入卻是不怎麼方便。
系統是用 cookie 認證?
某天客戶說了一句話「我們系統都是透過 Cookie 的方式進行驗證」。一開始我也覺得莫明奇妙,不管再怎麼樣也是要到 server 上去驗證的不是嗎?client 的 cookie 應當只是存沒有敏感性的資料才是。怎麼會是用 Cookie 丟上去就可以登入了?而且還是存登入的憑證?
網站開發經歷比較久的朋友可能都知道,cookie 在以前有很嚴重的資訊安全問題 (通常都是帳號被盜),因此有一段時間還有出現完全去 cookie 化的情況。
http://zh.wikipedia.org/wiki/Cookie
( ps.. ASP.NET 中預設的專案中都是用 ViewState 所以可以不需要用到 Cookie )
而且也沒有辦法控制使用者是否願意開啟 cookie 機制,再加上為了避免 cross site scripting 攻擊讓個資外洩,或是讓駭客自已自製 cookie 來僑裝成一般使用者登入,因此都會用其他的方式來驗證。
雖然現在 FB 上也有提供 Cookie 的方式來幫您自動登入,但資訊安全的問題還是很有爭議的。
http://blogs.wsj.com/digits/2011/09/26/facebook-defends-getting-data-from-logged-out-users/
HTTP Request + Header
現在 windows 8 的 IE 在基於安全性考量的情況下,則是不允許外部控制 Cookie ,就算是用程式控制也一樣。
為了讓開發人員在 win 8 app 中可以更輕松地克服這個問題, 8.1 時提供了 NavigateWithHttpRequestMessage,這點對於企業的開發團隊來說可是一大福音。因為可以控制更細緻的項目到 Server 上。
這個做法就跟正規的方式登入你的系統是一模一樣的,但可以用 app 的方式統一幫使用者登入。而且還可以從 server 端拿到正確的 cookie 。
可以看到這是一個 Native Web App ,外面用 Native app ,裡面則是標準的 Web 頁面。
這裡我們用 HTTP Request + Header 的方式幫使用者登入,而且也不會出現 Facebook 的 web 登入頁面 要求使用者 再輸入一次帳密。
如何知道系統是怎麼登入
其實很簡單,只要開啟 IE 按下 F12 錄製
或是用 Visual Studio 的 Web Test 錄製工具跑一次,就可以馬上知道系統登入的方式。以 FB 的登入為例,這裡是直接用表單參數的方式進行驗證
編:因為是明碼所以還是要保護一下個資
8.1 的新功能NavigateWithHttpRequestMessage
8.1 的 WebView 可以用 NavigateWithHttpRequestMessage 來進行頁面載入,這個可以用程式的方式控制 Request 上所有的資訊。 ( 但沒有辦法控制 cookie 因為是唯讀 )
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.navigatewithhttprequestmessage.aspx
程式的部分如上,只有 4 行。
經過分析過後因為登入的資訊都在 表單參數中,所以 Header 的 Conent-Type 也要改成 application/x-www.form-urlencoded 。
接下來就將內容透過 HttpStringConent 的方式直接塞進去就可以了
再做 NavigateWithHttpRequestMessage 即可。
當然若是系統都是自行開發的話,其實分析的那個部分就可以跳過了,因為您一定很清楚自已的系統是怎麼驗證使用者的