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

sil*_*min 6 rest restful-url restful-architecture

在基于REST的系统上,"加密"资源ID的选项有哪些.

例如:

 /client/2
Run Code Online (Sandbox Code Playgroud)

可以访问

/client/SOMEHASHKEY
Run Code Online (Sandbox Code Playgroud)

我在想 :

1 - 拥有跟踪资源ID的数据库表以及相应的HASH,并在每个请求中查找它.这显然很难实现,并且相当多地增加了服务器的工作量.

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

那么这种场景有很好的做法吗?你会推荐什么 ?

非常感谢

stm*_*llr 2

如果您的目的是让客户端 ID 难以猜测,请使用uuids,例如 32 个十六进制字符长的guid,例如 21EC2020-3AEA-1069-A2DD-08002B30309D。

识别域中的实体完全取决于提供 REST 服务的实现。

某些应用程序默认使用 guid 来识别实体。一个很好的例子是lovefilm API

GET /users/9D48675C-096F-11DC-BF5A-88D01745CE5C HTTP/1.1
Host: openapi.lovefilm.com
Run Code Online (Sandbox Code Playgroud)

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