2016-07-25 16 views
0

我正在用「朋友」的概念構建某種社交應用,朋友可以針對他們的一個或多個朋友採取行動, 我不想問DB,如果友誼確實存在,每次有人發送任何類型的要求採取行動。 我想出的一個想法是在友誼被批准後,數字簽名將被髮送給每個用戶,每個用戶可以在服務器中檢查每個請求的花銷少於詢問數據庫的花銷。 然後,我可以每天更改異步密鑰,並強制用戶要求新的數字簽名,在這種情況下,我會接近數據庫以測試友誼(這對安全性有好處,但如果用戶想取消友誼也是必須的) 。在朋友請求後給予數字簽名以證明在社交應用中的友誼?

我問的是如果這是一個可怕的想法?也許我沒有看到什麼。或者只是任何有關這些場景的任何信息的鏈接都會很棒。

+0

我讀了一些關於使用加密方法而不是db調用的更多信息。我還沒有發現任何關於我的用例。然而,我確實發現在友誼簽名中發送一個時間限制可能會更好,這代表簽名有效而不是更改我的密鑰。 –

回答

1

可以完成發送數字簽名的想法,但我不確定實際上查詢數據庫的速度是否會更快,因爲數據庫的速度非常快。

讓我們繼續說這是一個好主意。您需要一個具有關於誰是你的朋友並且必須經過服務器驗證的信息的令牌。對我而言,這看起來像是你可以使用JSON Webtoken(JWT)的東西。

Here is the basics on JWTs

智威湯遜有三個部分:標題,有效載荷和簽名。標題定義了令牌的有效期限,並且有效載荷可以包含朋友列表(或朋友的ID)。簽名是整個事物的散列,用服務器的私鑰簽名,從而驗證服務器是否已批准該令牌直到時間X爲止有效。整個事件在發送之前進行了編碼。

然後,您可以將JWT發送到某種HTTP標頭中,可能是Authorization標頭。然後服務器可以快速解碼JWT(有很多語言的庫,JWT是一個很好的標準),因此不需要查詢數據庫。 JWT的大小確實需要發送,因此我不確定你會從中獲得任何速度。

+0

謝謝。我認爲使用JWT會使我受益。其中一個原因是,我可以將處理聊天的服務器和處理髮布友誼的服務器之間的其他操作分開。這樣我可以相應地調整我的分貝。我可以使用jwt爲會話做同樣的事情,然後我可以在這些服務器中一起忽略數據庫。 –