我和我的同学一起在学校做项目并在Spring Security中使用JWT。我们在解码前端的JWT有效载荷方面存在争议。前端正在使用Angular。 Oauth端点返回授权响应如下:
{
"access_token": <access_token>,
"token_type": <bearer>,
"expires_in": <time>,
"scope": <scope>,
"jti": <jti>
}
据我所知,这是标准回复。争论的焦点是我们是否应该修改此响应以获得用户名和权限。例如:
{
...
"username": <username>
"authorities": <authorities>
}
我没有看到必要性,因为有效载荷已包含相同的信息。此外,有效负载只是base64编码。因此,它无法通过设计包含任何敏感信息。此外,它似乎是一种安全风险,因为JWT是不可变的,但根据响应机构对用户角色做出任何假设在我看来都是错误的。我可以拦截响应并愉快地让自己成为管理员,然后才能进入前端,我会被引导到管理员视图(当然,任何进一步的请求都会因为JWT而无效)。我有一个想法,可能会在应用程序中增加一些额外的安全性。我们的想法是,您无法对授权请求中的用户及其角色做出任何假设。你刚刚获得了JWT并且单独制作了#34; WhoAmI&#34;使用JWT向端点请求,返回用户名和角色。这样,前端可以将这些值与从授权服务器获得的值进行比较,并可以立即检测这些值是否已被篡改。如果我理解正确,那么授权服务器应该这样做 - 它应该委托访问。
我非常感谢您对此事的看法。