當您想要與用戶一起登錄時,您會發送一個POST
請求到http://localhost:5984/_session
並獲取一個cookie。此cookie默認有效10分鐘,並存儲在我的$_COOKIE
變量中。如何檢查用戶令牌在CouchDB中是否仍然有效?
在我的場景中,我希望用戶能夠根據他登錄的事實(例如,具有有效令牌)與我的網站進行交互。我的問題是如何檢查用戶cookie是否仍然對我的CouchDB有效?
當您想要與用戶一起登錄時,您會發送一個POST
請求到http://localhost:5984/_session
並獲取一個cookie。此cookie默認有效10分鐘,並存儲在我的$_COOKIE
變量中。如何檢查用戶令牌在CouchDB中是否仍然有效?
在我的場景中,我希望用戶能夠根據他登錄的事實(例如,具有有效令牌)與我的網站進行交互。我的問題是如何檢查用戶cookie是否仍然對我的CouchDB有效?
從here借用:
CouchDB的餅乾算法(查看源)基本上是
data = username + ':' + timestamp; base64(data + ':' + sha_mac(data, secret))
。其中secret
是couch_httpd_auth.secret值加用戶的鹽值。
這意味着如果您只想檢查時間戳,您可以Base64解碼cookie,然後從結果中提取時間戳,並與當前時間進行比較。
如果您想實際驗證cookie有效(即不僞造),您需要知道用戶的密碼salt和服務器密碼。如果這是客戶端應用程序,那很危險。即使它是一個服務器應用程序,它也會將敏感信息放在更多的地方,這會帶來額外的安全風險。這些風險是否值得,取決於你和你的實施。
偉大的建議,但我認爲這不是我應該執行的,因爲你提到的缺點。如果您只想在登錄用戶的上下文中運行服務器端操作(例如,函數),您會親自使用此方法嗎? – Magiranu
@Magiranu:我可能只是用CouchDB服務器('GET/_session')檢查令牌,讓CouchDB驗證它。如果引入性能問題,可以將其緩存在服務器上。我會第一次做查找,然後緩存時間戳和完整的cookie;那麼你不需要爲每個請求重新驗證cookie,並且仍然可以信任時間戳(因爲完整的令牌先前已經過驗證) – Flimzy
對於「檢查令牌」,您意味着在GET請求中通過頭部發送cookie ? (Souce:http://docs.couchdb.org/en/2.1.0/api/server/authn.html#get--_session) – Magiranu