2010-09-08 59 views
5

上下文:html5本地應用程序可以有一個asp.net會話嗎? (適用於iPhone的本地Web應用程序)

實際上我開發一個小的Web應用程序(C#/ MVC2)。用戶將會使用他們的iPhone(未來可能會使用Android手機)來訪問它。

目前它非常簡單(它只是顯示了我們客戶的ERP中的一些信息和報告),並且我決定嘗試創建用戶可以添加到他們的iPhone的本地webapp,以便他們有一個圖標對於它來說,最重要的是,大多數文件都是本地緩存的,因此只有使用服務器中的json獲取相關數據。

問題:

爲了驗證用戶,小形狀詢問用戶名和密碼,並將它們發送到通過AJAX服務器,這反過來驗證用戶並設置authcookie。如果應用程序在Safari中執行,則一切正常,但如果它是在本地執行的(即直接通過圖標在Mobile Safari中),則服務器會正​​確驗證用戶,但在下一次調用恢復數據的Ajax調用時會丟失驗證被製成。

這是否意味着在webapps中Mobile Safari不支持會話cookie?我做錯了?

而最重要的是:在訪問遠程數據的本地web應用中對用戶進行身份驗證的最佳方式是什麼?

回答

0

我不太清楚你的意思是什麼本地webapp。我假設它是在本地主機上運行的HTTP Web服務器。

如果是這樣的話,您需要一些協議在http://localhosthttp://yourwebsite.com之間進行通信,該協議應該有助於localhost通過yourwebsite.com對用戶進行身份驗證。我認爲OAuth可能就是您要找的。

用戶第一次訪問您的本地webapp時,他將被重定向到yourwebsite.com進行身份驗證。之後,yourwebsite.com會爲他帶回一個OAuth令牌。在yourwebsite.com驗證令牌有效後,localhost可以自行爲用戶提供服務。

+0

謝謝,但不幸的是我在談論HTML5離線應用程序。它們是可以存儲在手機中的HTML頁面,可以脫機工作,在工作區中有自己的圖標,並且像本地應用程序一樣運行(您不會看到Chrome瀏覽器)。 – salgiza 2011-02-24 08:16:24

0

(我知道我很遲了這個問題,但無論如何...)

移動Safari瀏覽器採用了略有不同的網絡引擎,在「主屏幕應用程序」(即用於網頁的你書籤作爲獨立的圖標在iOS主屏幕上)。

也許你看到的問題來自於Cookie,而不是移動Safari 本身?我想這很容易測試:如果應用程序在移動Safari中運行正常,而不是主屏幕圖標,那麼您的答案就是。

作爲另一種選擇,不是依賴應用程序的在線版本中的身份驗證,另一種可能適用於您/您的組織的方法是以未經身份驗證的狀態使用該應用程序,但通過移動員工的VPN ? (這將仍然可以作爲一個離線的網絡應用程序確定)。

+0

感謝您的回答。實際上,這是處理主屏幕應用程序的一個問題。目前他們正在使用移動Safari中的應用程序,但理想情況下他們應該能夠使用它從一個圖標(屏幕狀態在移動設備中很重要,我們不需要任何瀏覽器欄)。 – salgiza 2011-06-16 07:44:40

+0

嗯......應該有辦法在評論中添加新行,但我離題了。我們應該使用VPN(加密連接),但也需要cookie會話,因爲我們將值存儲在服務器會話中(並且我們需要知道用戶因不同原因訪問應用程序的身份)。如果將來有時間的話,我們可能會使用驗證令牌(基本上,它將類似於cookie,但是會在每次Ajax調用時顯式發送)。 – salgiza 2011-06-16 07:52:42

0

而不是使用cookie不能有一個ajax調用登錄,只是返回「authcookie」值。該值可以使用localStorage或類似的方法保存。

http://dev.w3.org/html5/webstorage/

後來,當你想獲取的東西,你可以將此值發送到使用自定義標題(X-認證或類似的)或只是追加它作爲一個GET變量到URL服務器。

+0

這個網站可能會幫助你開始:http://diveintohtml5.org/storage.html – 2011-06-24 09:37:16

+0

謝謝,我們已經在應用程序中使用localstorage許多事情。問題是使用基於cookie的會話是在.Net MVC(主要是其他地方)授權用戶的標準方式。創建我們自己的基於令牌的系統應該不會太難(我們將來可能會這樣做),但是本地Web應用程序(在iPhone中)不支持cookie(以及基於cookie的會話) 。 – salgiza 2011-06-27 13:58:16

0

您最好的選擇: http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

訪問受保護的資源,客戶端包含在HTTP請求的授權標頭的訪問令牌

登錄:

var loginData = { 
    grant_type: 'password', 
    username: ..., 
    password: ... 
}; 

$.ajax({ 
    type: 'POST', 
    url: '/Token', 
    data: loginData 
}).done(function (data) { 
    // Cache the access token in session storage. 
    sessionStorage.setItem(tokenKey, data.access_token); 
}); 

第二次請求:

// If we already have a bearer token, set the Authorization header. 
var token = sessionStorage.getItem(tokenKey); 
var headers = {}; 
if (token) { 
    headers.Authorization = 'Bearer ' + token; 
} 

$.ajax({ 
type: 'GET', 
url: 'api/values/1', 
headers: headers 
}).done(function (data) {}); 

如果你不打算使用的Web API,你必須生成你自己的令牌,並把它放在每個請求的數據