[英]How to handle the JWT on the client layer?
这是一个主观的问题,尽管我认为这不是基于观点的。 在这里提出问题的唯一原因是,即使阅读了有关JWT身份验证的多篇文章,我也找不到令人满意的答案。
我最近开始学习JWT,发现它是由服务器颁发给客户端的3部分令牌,用于真实性以及以声明形式传递诸如用户范围/角色/权限等数据。
但是我的问题是:
令牌的声明部分仍然是base64编码的字符串,可以使用atob/btoa
轻松解析该字符串。 那么传输真的安全吗? 这里真正的收获是什么?
关于生成令牌并将令牌发送到UI有多篇文章。 但是,几乎没有关于UI到底如何使用它的好文章。 使用atob
解码令牌并使用其中的内容是一种常见的做法吗? 还是存在另一种验证和检索数据的方式。
通过标头传输数据真的安全吗? 我的意思是它可以安全抵御MITM,XSS等问题。
我真的很感谢专家为解决这些问题付出的努力?
对于问题1,收益不在客户端。 如果您不信任从服务器收到的内容,则无论如何对其进行混淆/编码/加密/,都将无法信任它。 关键是您将此令牌发送回服务器。 在服务器上,快速检查将发现此令牌是合法的。 想象一下一个复杂的登录场景,其中MegaCorp在739个子系统中查找用户的权限,将其合并为一个有效负载,然后不必在进一步的请求上再次这样做。 客户端将令牌发回时,它会验证您是否已正确登录并使用权限进行进一步处理。
对于#2,您可以将任何您喜欢的东西放入此有效负载中,只要它不是太安全即可。 我主要将其用于基本用户信息和应用程序权限。 因此,我可以绘制用户名并提供指向特定用户设置页面的链接。 我可以检查用户是否有权访问管理页面或需要检查的任何权限。 尽管恶意用户可以通过操纵客户端数据来欺骗系统,因此可以看到管理页面,但是当调用返回到服务器以获取该页面的数据时,令牌要么是非法的,要么是请求将被拒绝,或者它不包含适当的权限,再次,它将被拒绝。
我对安全性的了解还不足以尝试回答#3。
有些人只将JWT用于isLoggedIn
,这很好,但是我认为错过了一些有用的可能性。 如果使用得当,这可以是捕获客户端和服务器的用户信息的单一机制。 但是我认为重要的一面是服务器。 这可以在客户端上以多种方式完成。 但是很难为服务器找到更好的东西。
令牌的声明部分仍然是base64编码的字符串,可以使用atob / btoa轻松解析该字符串。 那么传输真的安全吗? 这里真正的收获是什么?
如果您通过https发送令牌,则传输是安全的(其他人无法读取/修改)。 JWT包含两个重要部分:有效负载和验证签名。 签名只能由一个人生产和验证,并证明有效载荷对该人是合法的。 这是一个简单的用例:
用法的另一个示例是仅通过邮件进行身份验证。
关于生成令牌并将令牌发送到UI有多篇文章。 但是,几乎没有关于UI到底如何使用它的好文章。 使用atob解码令牌并使用其中的内容是一种常见的做法吗? 还是存在另一种验证和检索数据的方式。
通常,客户端希望从某个服务器获取令牌,以便稍后将其发送回去。 客户端无法验证签名,因为他不与服务器共享私钥,他不是信任源。
通过标头传输数据真的安全吗? 我的意思是它可以安全抵御MITM,XSS等问题。
使用https是安全的: HTTPS标头是否已加密?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.