JWT是一种很好的方式,可以确保发送给用户和返回的数据没有被篡改,但这也导致了一些艰难的选择。目前我面临的困境是,在JWT声明中存储授权数据并仅在授权时访问数据库,或仅存储用户ID并在每个请求到达服务器时检查授权级别。
这使选择变得非常困难的原因是该应用程序使用多个授权级别,这使得base64编码的URL非常长和笨重(下面展示了可以预期存储为授权级别的内容)。
另一方面,为了获取授权,需要在数据库中进行两次查找。
所以我的问题是:每个请求额外的开销是否值得避免每个请求时都查找权限所带来的麻烦?
顺便说一句,在权限更改的情况下,查找数据库的方法具有不要求用户重新登录的好处(参见文章)。
"perms": {
"roles": [
{
"name": "Admin",
"id": 1,
"assigned": true
},
{
"name": "Webmaster",
"id": 8,
"assigned": true
}
],
"actions": [
{
"id": 1,
"name": "cms-edit",
"parameters": null,
"parameterized": null
},
{
"id": 9,
"name": "admin-syslog",
"parameters": null,
"parameterized": null
},
{
"id": 10,
"name": "admin-debug",
"parameters": null,
"parameterized": null
},
{
"id": 12,
"name": "member-list-extended",
"parameters": null,
"parameterized": null
},
{
"id": 2,
"name": "cms-list",
"parameters": null,
"parameterized": null
},
{
"id": 3,
"name": "cms-add",
"parameters": null,
"parameterized": null
},
{
"id": 5,
"name": "member-list",
"parameters": null,
"parameterized": null
},
{
"id": 7,
"name": "member-view",
"parameters": null,
"parameterized": null
},
{
"id": 8,
"name": "member-edit",
"parameters": null,
"parameterized": null
}
]