我打算使用JWT我對我的REST API的用戶的身份驗證(以書面的NodeJS,使用快遞),但我見過人們在互聯網說,這是很不安全的。我應該如何使用我的REST API對我的用戶進行身份驗證?
難道真的不是安全?什麼是更好的選擇?
我打算使用JWT我對我的REST API的用戶的身份驗證(以書面的NodeJS,使用快遞),但我見過人們在互聯網說,這是很不安全的。我應該如何使用我的REST API對我的用戶進行身份驗證?
難道真的不是安全?什麼是更好的選擇?
護照將用於身份驗證的用戶最好將來到您的應用程序。
JWT只是一個令牌,而不是一個認證/授權協議。使用JWT可以是安全的或不安全的,這取決於你如何使用它。 JWT是OIDC使用的本機令牌。 您可能指的是通常使用JWT作爲價值代幣,這可能不如參考代幣安全。 請參閱here以獲得更清晰的解釋。
在關於使用基本上基本的HTTP身份驗證(僅使用JWT而不是uuencode(user:password)作爲令牌)的問題的評論中。只要通信得到妥善保護(https使用TLS> = 1.1),基本身份驗證沒有任何問題,但使用此類身份驗證存在嚴重的限制。 任何需要用戶名和密碼的API認證意味着應用程序的每個客戶端都需要擁有自己的用戶(主體)。在我鏈接的論文中,身份驗證之上的整個協議堆棧旨在解決API遇到的幾個問題。主要有兩個:
聯合:用戶只登錄一箇中央系統,不需要再次登錄每個信任中央系統的系統。
代表團:用戶權限委託給第三方,允許它做的只是特定的任務(而不是其他)。該權限可以單獨撤銷,無需更改其他第三方的權限或更改密碼。
聯邦是一種功能,可讓您在未提供密碼的情況下使用Facebook或Google帳戶登錄到StackOverflow。代表團允許您指定StackOverflow可以用您的Facebook或Google帳戶執行哪些操作(例如,獲取您的個人信息,但不能發佈)。代表團在聯邦之上工作。
所有這一切的問題是,它使您的API更難以訪問:給客戶端一個用戶名和密碼與使用戶使用客戶端登錄到身份系統並允許客戶端使用該API。 如果您的系統是具有單個客戶端應用程序的B2B API,那麼僅使用身份驗證就沒有問題。如果您的API以任何方式涉及用戶或被第三方應用程序佔用,那麼您實際上別無選擇,只能實現整個安全堆棧(即OIDC和OAuth)。堆棧的設計有一個(良好的)原因,它可以節省您已經解決的相同問題。
這取決於你如何使用它們。 JSON網絡令牌是幾乎足夠安全只要:
是的,但你看,你說「幾乎安全」。我知道沒有什麼是不可破解的,但它們必須是現在用於身份驗證的頂級解決方案,對吧?大家在用什麼? – Devz
在大多數情況下,安全特性取決於實際實施,而不是所用的規範或概念。您可以擁有安全的JWT實施,並且您也可以慘敗...
閱讀critical vulnerabilities in JSON Web Token libraries瞭解由某些實現暴露的JWT相關漏洞的一些示例,不是因爲實際規範,而是因爲他們如何實現它以及開發者如何結束使用它們。
認證是一個難以解決的難題,因此安全實施需要時間和資源來實施。如果你真的關心安全最好的建議(替代)是儘可能多地將它委託給某人或某個完全關注它的東西。
這也會讓您有更多時間專注於解決讓您開始構建應用程序的業務問題。 我會建議看看Auth0,但我非常喜歡它,所以我最終在那裏工作,所以我很偏向。
感覺像Auth0不能被RESTful API使用..再加上我不覺得讓所有的用戶都可以使用其他服務。 – Devz
您可以使用Auth0等服務作爲REST API消耗的令牌的發放者。憑藉代幣總是有兩個角色,一個發行人和一個消費者;同一個實體可以兼得,但當然複雜性顯着增加。如果你想自己管理用戶數據,也可以[配置它使用你自己的數據庫](https://auth0.com/docs/connections/database#using-a-custom-user-store)並讓Auth0只處理協議合規性和額外的安全措施。 –
哪種策略?我已經使用基本身份驗證和護照,但它不安全。 – Devz
我對此沒有更多的想法,但大多數地方和tuts「指導我們的護照js與socket.io這將確認會話socket.io然後認證與護照js。可能會安全。 –