我已經花了幾個星期的時間試圖圍繞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. 瞭解JWT令牌谷歌的OAuth2
- 3. java解碼JWT
- 4. 在Clojure中解碼JWT/Java
- 5. JWT未解碼「JWT格式錯誤」 - 節點角度
- 6. 如何使用RSA私鑰解密JWT
- 7. IDX10659錯誤解密JWT令牌
- 8. 使用pem證書解碼ruby/jwt
- 9. 如何使用System.IdentityModel.Tokens.Jwt簡單解碼JWT
- 10. 解碼Golang中的JWT令牌
- 11. 如何使用帶簽名證書的C#JWT包對JWT進行解碼
- 12. 無法理解JWT授權中的解構(Phoenix)
- 13. 獲取用戶jwt Knock Rails JWT
- 14. JWT auth0創建沒有證書的jwt
- 15. 嵌套JSON JWT靈氣何塞-jwt庫
- 16. 瞭解
- 17. 瞭解
- 18. JWT驗證Python
- 19. Django Rest Framework + JWT
- 20. C#JWT Vertification
- 21. 在JWT方法
- 22. Freeswitch JWT集成
- 23. Spring + Oauth2 + JWT + Websocket
- 24. Spring Boot + Mongo + JWT
- 25. OpenTok JWT Authenticacion Bug
- 26. JWT Scala- java.security.spec.InvalidKeySpecException
- 27. 緩存Google JWT
- 28. 從JWT令牌
- 29. express-jwt與jsonwebtoken
- 30. socket.io JWT與PHP
也許這篇文章幫助你澄清一些概念:https://realpython.com/blog/python/token-based-authentication-with-flask/這是關於Python和瓶,但思路是相同的。 –