(技術)淺談伺服器的授權、驗證
Authentication
驗證
,告訴伺服器登入者是其所聲稱的使用者,以遊戲登入舉例
1 | +------------------------+ |
Authorization
當玩家通過驗證
進入遊戲伺服器後,伺服器會根據玩家的帳戶資料進行授權
,假設想要2023的年槍,紫炫流光,就得向伺服器獲得授權
,買解碼器、黑市,才能解鎖新武器。
簡單舉例
1 | 購買武器 -> 檢查是否有足夠點數 -> 扣款授權 -> 武器授權 -> 成功購買 |
每個玩家客戶端都有全部種類的武器,來自於每次的更新檔,是為了提升遊戲體驗,總不能撿到新槍再下載吧,因此授權
只是向伺服器請求,解鎖不能使用的武器。
Https Authentication(Basic)
一種HTTP驗證機制,Base64將用戶名和密碼進行編碼,然後在HTTP請求中以Authorization標頭的形式傳送。簡單來說,當使用者輸入用戶名和密碼時,這些數據將被編碼並包含在HTTP請求中,伺服器收到請求後會解碼這些數據並進行身份驗證。
jigsaw demo
1 | ac:guest |
- 伺服器檢查在
Header
裡的Authorization
欄位,規格應為Authorization: Basic <value>
- 此時因為沒有
Authorization
並沒有資料,server按照約定會回傳401
status code並在Header上加上WWW-Authenticate: Basic realm="<value>"
- client當發現得到以上的回應後,會出現一個給予使用者輸入用戶名稱及密碼的地方
- client將用戶名稱跟密碼做成
base64(username:password)
- client將資料放到
Header
:Authorization: base64(username:password)
先生你誰?-身分驗證Authentication (Basic, token, JWT)
把header的authentication取出base64解碼可以看到正好是輸入的帳密
1 | base64(username:password) |
Digest:
摘要訪問認證是一種協議規定的Web伺服器用來同網頁瀏覽器進行認證信息協商的方法。它在密碼發出前,先對其應用哈希函數,相對於HTTP基本認證發送明文而言,更安全。
https://zh.wikipedia.org/zh-tw/HTTP%E6%91%98%E8%A6%81%E8%AE%A4%E8%AF%81
- 客戶端向服務器發送請求。
- 服務器回復401和WWW-Authenticate,nonce(服務器生成的隨機字符串,防止重放攻擊)。
1
2
3
4www-authenticate:
Digest realm="test",
domain="/HTTP/Digest",
nonce="e67010901fb034b2e0e0c9e0c1f451d8" - 客戶端使用用戶名、領域和密碼計算出HA1值,使用請求方式和請求URI計算出HA2值。
- 客戶端使用HA1、nonce和HA2計算出響應值,加到“Authorization”的header。
1
2
3HA1 = MD5(username:realm:password)
HA2 = MD5(method:digestURI)
response = MD5(HA1:nonce:HA2) - 服務器使用相同的計算方式驗證。如果正確,服務器會返回請求的資源,否則,返回401未授權或其他錯誤狀態碼,客戶端必須重新進行身份驗證。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Boris's Blogs!
評論