REST身份验证 - 数字签名?

时间:2013-05-14 10:48:41

标签: java security rest

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

在谷歌搜索中,我遇到了这个link

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

如果有更好的REST身份验证替代方案,请指出我。

2 个答案:

答案 0 :(得分:1)

  

这是最好的方法吗?

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

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

不太好:

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

是否使用数字证书?

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

  

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

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

  

如果有更好的REST身份验证替代方案,请指出我。

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

答案 1 :(得分:-1)

您可以像这样模拟公钥/私钥认证

你需要两件基本的东西!

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

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

  3. Rest服务(服务器端)将通过“Application ID”

    记录所有允许的应用程序

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

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

    进行解密

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

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

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

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