2013-05-14 89 views
2

我想保护使用Spring MVC开发的REST API。REST验证 - 数字签名?

在谷歌搜索我碰到这个link

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

另请指出,是否有更好的REST验证替代方案。

回答

-1

你可以模拟这样的公钥/私钥验证

你需要两个基本的东西!

  1. 用户ID /应用ID(要检查该应用程序被允许访问该应用程序)(私钥)

  2. 用于API的随机密钥(以检查该方法允许用于再认证应用)

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

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

这种情况下,您正在用公钥(You API随机密钥)加密您的API。 正在调用该方法的客户端正在使用其私钥解密(应用程序ID)

当客户端发送他的应用程序ID时,您可以从其应用程序ID和API随机密钥中生成HASH,并使其确保这个应用程序被允许调用这个方法。

的这里优点是:1。 服务器端可以更改加密算法,客户不必担心

  1. 服务器可以改变方法加密(公钥),其客户端不用担心

  2. 客户端不能更改私钥(应用程序ID)。如果他改变了,服务器会拒绝它。在其他的方式,非注册的应用程序不能访问REST服务

1

这是最好的方法?

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

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

不是很好:

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

是否使用数字证书?

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

或数字证书只用于基于SOAP的Web服务?

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

另请指出,是否有更好的REST验证替代方案。

如上所述:对于大多数服务来说,这是一个很好的方法。使用带有客户端证书的PKI将是另一种选择,在某些情况下更好。

+0

非常感谢Jens Schauder和@madhairsilence 对于我们的应用程序,我们有用户名/密码(例如admin/admin123)存储在数据库中。 如何为上述生成访问密钥和秘密访问密钥。 有没有什么标准? 一旦生成,我将这两个保存在数据库中。 亚马逊有类似下面, 访问密钥 - AIKAIKHMZWU7UQL3L43A 访问密钥 - 6lhqyE32gQscsfacqbJ3KIoujqzZeYSwbsdasdw – Jay 2013-05-15 09:34:43

+0

决不密码存储在数据库中!存储哈希代码。您可以并且应该使用随机数字生成器创建API密钥。由于这将被放在应用程序中,它不一定很容易记忆或任何东西。 – 2013-05-15 10:53:24