Restful API身份验证建议?

8

我正在开发几个RESTful API供第三方调用,这些API需要进行身份验证(apikey和基于secret的验证),以及授权(HTTP方法和URI为基础)。

是否有现成的软件可以重复使用,避免我们自己实现安全层?

3个回答

7

HTTP可以为您提供授权支持,因此您无需重新发明轮子

可以使用以下任一选项:

  • HTTP基本认证(使用SSL绕过明文密码提交问题)
  • HTTP摘要认证

摘要认证具有优势,它不会以明文形式传输密码,并处理重放攻击(使用nonce)。

我们使用HTTP Auth Digest(Tomcat servlet容器直接支持它),并且我们对它感到满意。

编辑:一些客户端存在Digest的问题(不太简单),因此现在我会选择Basic和SSL。 Basic的优点还在于您可以进行预先身份验证(在第一个请求中发送用户:pwd)。


我也想进行授权,例如通过一些API,如POST http://www.example.com/adduser,我只授予某些客户端访问权限。 - Howard
1
我明白了,这取决于您使用的技术平台。如果您使用Java和Servlet容器,则可以使用基于角色的内置授权。您将这些角色附加到允许的URL上,因此可以强制执行可见性。然后,您将一组客户端分组到角色中(即client1 + 2属于role1,client3-6属于role2)。如果基于角色的方法过于粗粒度(即每个客户端具有不同的访问规则),则需要实现进一步的授权层。但首先请尝试角色安全性是否符合您的要求(更易于实现)。 - manuel aldana

2

0

无论你使用什么技术,你都可以实现一些像 AWS 使用的系统。

  • 每个注册用户必须有一个用户 ID 和一个秘密访问密钥。
  • 每个请求都必须用 SAK 签名,并包含用户 ID。(还需考虑时间戳)。
  • 服务器根据用户 ID 从数据库中检索 SAK 并再次签署请求,如果签名相符则继续,否则返回错误。

实现并不太困难,但需要考虑到每个对服务器的请求都需要查询存储以检索 SAK。其中一种选择是使用 NoSQL 数据库或类似的解决方案(如 Redis 或 memcache)来存储用户 ID / sak。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接