在基于REST的系统上,“加密”资源ID的选项有哪些。
例如:
/client/2
可以访问
/client/SOMEHASHKEY
我在想:
1 - 让数据库表跟踪资源ID及其相应的HASH,并在每次请求时查找。这显然很难实现,并且相当多地增加了服务器的工作量。
2 - 有某种内部加密算法可以根据资源创建日期,资源ID和base64创建一个哈希值(显然不是最优的,但你明白了)
对于这种情况,有没有好的做法?你会推荐什么?
非常感谢
答案 0 :(得分:2)
如果您的意图是难以猜测客户端ID,请使用uuids,例如32个十六进制字符长guids,例如21EC2020-3AEA-1069-A2DD-08002B30309D。
确定域中的实体完全取决于提供REST服务的实现。
某些应用程序默认使用guid来标识实体。一个很好的例子就是例如lovefilm API:
GET /users/9D48675C-096F-11DC-BF5A-88D01745CE5C HTTP/1.1
Host: openapi.lovefilm.com
但是,使用难以猜测的标识符并不能保护您免受未经授权的访问,并且不能替代真正的身份验证机制。