簡體   English   中英

驗證 angular 中的 JWT Token

[英]Verify JWT Token in angular

我的應用程序后端運行在 Django Rest 框架上,前端運行在 Angular 上。

我已經在使用 JWT 進行身份驗證並且工作正常。

我的要求是調用特定的 API(與身份驗證無關),這會以純文本形式為我提供一些詳細信息。 我不想要它的純文本形式,所以我想我會創建一個 JWT 令牌並將其作為響應發送並使用密鑰在前端對其進行解碼。

我在沒有秘密的情況下使用 jwt-decode 實現了解碼部分。 我擔心的是,如果攻擊者攔截了我的響應並修改了令牌,我該如何應對這種情況?

這就是我在 angular 中解碼令牌的方式

try {
  decoded = jwt_decode(token);
  return decoded;
} catch (Error) {
  return null;
}

有沒有辦法在 Angular 中用秘密驗證/解碼我的令牌? 就像是:

data = jwt.decode(encoded_token, 'SECRET_KEY', algorithms=['algo']) # Python Code  

請在這里指導我。 如果還有其他方法可以實現我想要的,請告訴我

我不想要它的純文本形式,所以我想我會創建一個 JWT 令牌並將其作為響應發送並使用密鑰在前端對其進行解碼。

JWT 令牌通常是純文本。 有兩種類型的 JWT——JWS(簽名 JWT)和 JWE(加密 JWT)。 后者對內容進行了加密,因此除非擁有解密密鑰,否則任何人都無法閱讀它。 但是,加密很難配置和管理,因此 JWE 並不經常使用。 您需要一個非常充分的理由來使用 JWE。 簽名的 JWT (JWS) 更為常見。 事實上,當人們使用術語 JWT 時,他們通常指的是 JWS。 簽名的 JWT 是受完整性保護的。 使用簽名,您可以驗證 JWT 是否未被攻擊者更改,但它們是純文本。 任何人都可以閱讀 JWT 的內容,只是不能修改。

還要記住,Angular 應用程序的所有代碼都可供用戶使用,這意味着它不能保留任何秘密。 如果您在 Angular 應用程序中放置了一個秘密,那么任何人都可以讀取該秘密並使用它來解密您的 JWE,或者偽造新的 JWS,前提是您使用的是對稱簽名(例如 HS256 算法)。

我在沒有秘密的情況下使用 jwt-decode 實現了解碼部分。 我擔心的是,如果攻擊者攔截了我的響應並修改了令牌,我該如何應對這種情況?

如果您擔心中間人攻擊,有人會修改您服務器的響應,那么您只需要一個 HTTPS 連接。 如果您使用 HTTPS 連接到您的 API,那么您可以確定沒有人修改或閱讀回復。

如果您擔心您的響應會在 HTTPS 終止后被修改(例如瀏覽器中運行的惡意代碼),那么您可以使用 JWS 來確保響應的完整性。 您只需要記住使用非對稱簽名,這樣 Angular 應用程序就只保留公鑰。

我不知道您在 Angular 中使用的是哪個 JWT 庫,但我認為它們都能夠驗證簽名,所以這應該不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM