2
我正在嘗試使用私鑰&公鑰實現API的身份驗證。針對PHP的基於令牌的身份驗證
我想要做的就是提供一個私鑰,用它散列一些數據,並在頭部發送哈希,然後再次在服務器上重新哈希相同的數據進行比較。
我遇到的麻煩是什麼樣的數據,我應該散列,請求的URI,內容類型和內容本身,但什麼時候請求是GET和沒有內容。
使用私鑰散列任何數據足夠安全,還是需要做一些特殊的事情?
我正在嘗試使用私鑰&公鑰實現API的身份驗證。針對PHP的基於令牌的身份驗證
我想要做的就是提供一個私鑰,用它散列一些數據,並在頭部發送哈希,然後再次在服務器上重新哈希相同的數據進行比較。
我遇到的麻煩是什麼樣的數據,我應該散列,請求的URI,內容類型和內容本身,但什麼時候請求是GET和沒有內容。
使用私鑰散列任何數據足夠安全,還是需要做一些特殊的事情?
如評論中所述,您不需要公鑰/私鑰對。你想要的是一個身份證明。客戶會給你他們的用戶名/ ID(他們會要求一個身份證明),你需要額外的證據證明他們是真的。爲此目的,他們發送一個祕密的,這隻有他們應該知道的祕密。這是一個簡單的標誌。
您希望避免通過電線來回發送此令牌。請記住這是一個祕密,應儘可能保密。相反,你要求客戶發送的是間接證據;你問他們標牌的要求。
簽名請求意味着它們只是hash the contents of the request with a MAC algorithm,它們的祕密令牌是散列的關鍵。
當你* *哈希,你並不需要/想一個公私密鑰對,因爲在再現散列是沒有用的。公私密鑰對與非對稱密碼算法一起使用,這在這裏並不真正使用。所以,沒有P/P鍵;你真的只想要一個*共享密碼*,一個令牌。 – deceze
只發送該令牌進行身份驗證? –
如果你需要一個私鑰/公鑰對,你不想要一個哈希,你想要一個數字簽名。例如,['openssl_sign()'](https://secure.php.net/manual/en/function.openssl-sign.php)。 –