我正在嘗試製作網站的後端API(我想讓後端獨立於前端,因此我現在只需製作服務器端API儘可能遵守RESTfulness)。我之前沒有這樣做過,所以我不知道最安全的做法。關於使用會話創建Web API的問題
我怎麼現在就這樣做:
的API的某些部分應該只給特定用戶訪問他們登錄後長達24小時後。
要做到這一點,每當用戶在服務器端登錄(我使用無密碼登錄,因此用戶在他們的電子郵件中單擊鏈接時分配了該用戶ID),就會生成隨機會話ID,通過將該會話ID發送給客戶端進行響應一次。客戶端然後將該會話ID存儲在localstorage中(或者如果客戶端不是Web瀏覽器,則將其存儲在磁盤中)。
接下來,我將該ID與相關電子郵件一起存儲在服務器端的我的數據庫(MySQL表)中。
現在,每當客戶端想要我的API中的某些東西時,他們都必須在URL中提供電子郵件&會話ID(我現在不想Cookie),服務器會檢查數據庫中的會話ID,如果他們存在然後服務器響應完全否則與錯誤響應。
24小時後,服務器刪除電子郵件/會話ID對,並且用戶必須再次登錄(以生成另一個會話ID並將其與他們的電子郵件相關聯)。
現在的問題:
是我的方法安全還是有明顯的漏洞? 還有另一個我不知道的經過戰鬥考驗的方式嗎?
有沒有更好的方式讓客戶端存儲會話ID(如果他們是網頁瀏覽器,它們是 )?
什麼是生成唯一會話ID的最佳方式?目前我 生成一個隨機的16個字符的字符串,我設置爲 會話電子郵件表的主鍵。
正在使用MySQL表最高性能/最好的方式來存儲會話 ID(鑑於它將與每個請求查詢)?
我需要以任何方式加密會話ID嗎? 客戶端將其作爲「裸體」URL參數發送是否安全?
對不起,有一個帖子中有太多的問題,但我認爲他們是由上面的單一場景相關。如果它有什麼不同,我使用F#,我希望我的客戶端可以是Android應用程序或Web應用程序。
我不確定如何處理您的問題。它肯定與REST無關,它只是一個普通的Web應用程序。請刪除REST標籤,或者說明爲了使您的API具有RESTful功能,您做了什麼。 – inf3rno
@ inf3rno我在開頭提到REST。基本上我希望它是一個RESTful API(即,我不希望我的API的狀態完全中斷REST)。 – Tim