在我正在開發的應用程序中,我們正在使用ASP.Net表單身份驗證來授予用戶進一步訪問該網站的權限。本網站面向移動用戶,因此我們試圖儘可能地與服務器脫鉤,並利用KnockoutJS進行Web服務調用並加載數據,以便用戶查看它。安全地將用戶標識從ASP.Net傳遞到Javascript
現在,web服務(使用GET方法的REST服務)需要用戶名才能加載特定於該用戶的數據。我在服務器端(ASP.net)擁有這些信息,我可以輕鬆訪問User.Identity.Name
或直接訪問表單身份驗證cookie並獲取信息。
我的問題是,我需要從服務器獲取用戶名到客戶端,以便可以進行服務調用。我已經考慮過這樣做,但迄今爲止已經空白。目前,我將用戶名作爲url參數傳遞並使用JavaScript解析出來,並檢查Page_Load
方法以驗證url中的用戶名與登錄用戶的匹配。
我需要一種方法來保證從ASP.Net傳遞用戶名,該用戶名已經通過表單向客戶端JavaScript進行了身份驗證,因此我可以進行REST Web服務調用。
編輯:因此,谷歌搜索和我的團隊負責人會議上,我認爲我們將使用類似於此示例一個OAuth實施後:
http://www.c-sharpcorner.com/UploadFile/surya_bg2000/secure-wcf-restful-service-using-oauth/
還爲別的尋找同樣的答案,我發現這個問題非常有幫助理解的OAuth:
What's the point of a timestamp in OAuth if a Nonce can only be used one time?
如果一切都實現編輯正確,它會更安全(完全安全,安全,或更不安全?),而不是通過ASP標籤生成的簽名,如下所述?
編輯2:經過一些更多的審查和一些更多的搜索,我們終於決定了一個框架和做這項工作的方法。事實證明OAuth是不一定的答案在這裏,這個問題:
But Seriously.... Example of ASP.NET WebAPI implementation including OAuth
是一個很大的幫助,以及在搞清楚如何使這項工作。我們最終要做的就是生成簽名並放入JavaScript中,然後像這樣打電話。每次用戶加載頁面時,簽名都會變得時間敏感並重新生成,所以非常類似於OAuth,但我們並未實現完整的規範。
TL:DR最終的解決辦法是生成一個散列簽名,並把它放在網頁上通過ASP服務器標籤<%aspvar_here%>,並用它來驗證服務調用
該服務位於與用戶登錄的站點相同的服務器/域上嗎? – nerdybeardo
是的,他們都將駐留在相同的域 – Pseudonym