2

我正在尝试保护使用 Spring MVC 开发的 REST API。

在谷歌搜索中,我发现了这个链接

这是最好的方法吗?它使用数字证书吗?还是仅用于基于 SOAP 的 Web 服务的数字证书?

如果 REST 身份验证有更好的选择,也请指出我。

4

2 回答 2

1

这是最好的方法吗?

什么是“最好的”取决于您的要求。这种方法的好处是

  • 相当容易实施
  • 只要秘密访问密钥保持秘密,就没有明显的漏洞。

不太好:

  • 双方都必须知道秘密访问密钥,因此作为用户的您必须信任 REST 服务的提供者,将您的秘密访问密钥保密。在大多数情况下,这可能不是一个很大的限制,但仍然......

它使用数字证书吗?

没有。不涉及证书。除了可能用于向您提供秘密访问密钥的 SSL 连接。

还是仅用于基于 SOAP 的 Web 服务的数字证书?

不对。您可以将 https (SSL) 用于 REST,这通常涉及服务器提供证书以对自身进行身份验证。您还可以对其进行配置,以便客户端必须使用 SSL 使用证书对自己进行身份验证。这将是一个不错的解决方案,但在客户端实现起来相当棘手。这不是火箭科学,但阅读和理解证书以及私钥和公钥的处理可能会很棘手。您还需要一些受信任的根 CA,如果您使用已建立的 CA 之一,这要么需要大量工作,要么使用起来相当昂贵。当我在一家大公司的内部服务工作时,我会考虑这种方法。他们通常已经拥有这种基础设施。

如果 REST 身份验证有更好的选择,也请指出我。

如上所述:对于大多数服务来说,这是一个非常好的方法。将 PKI 与客户端证书一起使用是一种替代方法,在某些设置中效果更好。

于 2013-05-15T05:55:38.950 回答
-1

您可以像这样模拟公钥/私钥身份验证

你需要两个基本的东西!

  1. UserId / Application Id(检查此应用程序是否允许访问此应用程序)(私钥)

  2. API 的随机密钥(用于检查此方法是否允许用于随后经过身份验证的应用程序)

Rest服务(服务器端)将通过“应用程序ID”记录所有允许的应用程序

现在你可以在你自己的算法中使用这两个键。例如,您可以从中创建一个简单的 HASH。

场景是,您正在使用公钥(您的 API 随机密钥)加密您的 API。调用该方法的客户端正在使用他的私钥(应用程序 ID)解密

当客户端发送他的Application Id 时,您可以从他的Application Id 和API 随机密钥生成HASH,并确保允许该应用程序调用该方法。

这里的优点是: 1. Server端可以改变加密算法,客户端不用担心

  1. 服务器可以更改方法加密(公钥),客户端无需担心

  2. 客户端不能更改私钥(应用程序 ID)。如果他更改,服务器将拒绝它。否则,未注册的应用程序无法访问 Rest Service

于 2013-05-15T05:36:31.070 回答