繁体   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