REST安全设计在公开资源ID时的良好实践

时间:2013-05-12 01:08:19

标签: rest restful-url restful-architecture

在基于REST的系统上,“加密”资源ID的选项有哪些。

例如:

 /client/2

可以访问

/client/SOMEHASHKEY

我在想:

1 - 让数据库表跟踪资源ID及其相应的HASH,并在每次请求时查找。这显然很难实现,并且相当多地增加了服务器的工作量。

2 - 有某种内部加密算法可以根据资源创建日期,资源ID和base64创建一个哈希值(显然不是最优的,但你明白了)

对于这种情况,有没有好的做法?你会推荐什么?

非常感谢

1 个答案:

答案 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

但是,使用难以猜测的标识符并不能保护您免受未经授权的访问,并且不能替代真正的身份验证机制。