我已經花了幾個星期的時間試圖圍繞JWT對象包裹頭部。前提是有道理的,但我感到困惑的地方是安全方面。如果我是一個Javascript客戶端(例如Firebase)並且想要使用Open Auth向api發送安全請求,我會使用密鑰加密我的消息。但是,由於可能會查看客戶端來源,因此如何保護我的密鑰以免惡意請求無法通過。我錯過了什麼。有沒有辦法保護鑰匙?瞭解JWT
瞭解JWT
回答
使用收件人的公鑰執行加密過程。 您的客戶沒有私鑰可以生成和管理。
如果你想接收和解密這樣的智威湯遜,那麼你的客戶端必須創建一個密鑰對(私人和公共)僅用於會話,然後交換與服務器的公鑰。
啊,所以驗證後客戶端會收到加密的公鑰。這樣做更有意義。謝謝! –
客戶端收到公鑰或必須通過已知的方式獲取它們(例如URI,如google one => https://www.googleapis.com/oauth2/v3/certs) –
喬爾,我覺得你有方向錯了;)
人們會使用JWT OAuth協議內實現一些人可能會稱之爲「Stateless Authentication」,這意味着auth服務器會發出一個簽名令牌(用於例如客戶端應用程序或用戶)在成功驗證(客戶端或用戶的)身份之後不存儲關於/的信息,這在使用不透明的令牌時將是必需的。
您的JS客戶端可以使用已簽名的令牌來根據JWT的內容(權利要求),調用某個REST API端點(在所謂的資源服務器上)來驗證令牌的簽名並授權您的請求。
您的客戶端應用程序以及資源服務器都能夠反省令牌並驗證其簽名,因爲它們或者與auth服務器有共享密鑰(誰使用該密鑰首先對令牌進行簽名)或者知道與Auth服務器用來簽署令牌的私鑰對應的公鑰(如Florent在他的評論中提到的那樣)。
JWTs也可以被加密,如果資源服務器或auth服務器要求的敏感信息,但不希望存儲/訪問的數據是有用的。只要您沒有使用過的加密密碼,您就無法對其進行反思。
......長話短說,OAuth協議描述了針對資源或auth服務器的客戶端身份驗證。 JWT可以用來傳送授權證書(作爲授權頭中的一個不記名令牌)。但是,在OAuth流程中使用JWT的想法並不是「向api發送安全請求」。
謝謝澄清其關於簽署JWT不加密它。這是試圖瞭解智威湯遜時的重要一點 – lrxw
當構建API服務器,我更喜歡客戶端做自己的服務器上的加密過程,之後發送加密的數據。一切都在https下。
如果加密在某種程度上必須在Web客戶端完成,我更喜歡這個密鑰的壽命非常短暫,並且api服務器和客戶端都有一致的特殊算法來再次生成該密鑰。因此,如果密鑰被攻擊了,攻擊者無法長期受益。
- 1. 瞭解JWT的RSA簽名
- 2. 在Clojure中解碼JWT/Java
- 3. JWT未解碼「JWT格式錯誤」 - 節點角度
- 4. 如何使用RSA私鑰解密JWT
- 5. 如何使用System.IdentityModel.Tokens.Jwt簡單解碼JWT
- 6. 我無法理解JWT身份驗證
- 7. 使用pem證書解碼ruby/jwt
- 8. 解碼Golang中的JWT令牌
- 9. IDX10659錯誤解密JWT令牌
- 10. 瞭解
- 11. 獲取用戶jwt Knock Rails JWT
- 12. JWT auth0創建沒有證書的jwt
- 13. flask-jwt響應401 UNAUTHORIZED即使發送了請求中的assess_token
- 14. 如何檢查用戶是否已經分配了JWT令牌?
- 15. Freeswitch JWT集成
- 16. express-jwt與jsonwebtoken
- 17. Facebook登錄JWT
- 18. socket.io JWT與PHP
- 19. 緩存Google JWT
- 20. 從JWT令牌
- 21. 在JWT方法
- 22. Spring Boot + Mongo + JWT
- 23. Spring + Oauth2 + JWT + Websocket
- 24. Django Rest Framework + JWT
- 25. 瞭解#includes C++
- 26. 瞭解JNDI
- 27. 瞭解類圖
- 28. 瞭解類
- 29. 瞭解BufferStruct + WriteMemoryCallback
- 30. 瞭解jQuery的
也許這篇文章幫助你澄清一些概念:https://realpython.com/blog/python/token-based-authentication-with-flask/這是關於Python和瓶,但思路是相同的。 –