我想使用消息身份验证代码 (MAC) 来签署对 REST API 的调用,该算法在 Java、php、Ruby 和 C# 中使用起来轻松舒适?
较长的故事: 我的应用程序(Play Framework 2.0)提供了一个非常简单的 REST API,只有几个服务可供有限且已知*的客户端组访问。安全性在这里很重要,客户的易用性也很重要。
(* 已知意味着他们必须首先在应用程序中注册,这是他们获得 MAC secret 的地方,我不知道他们是谁以及他们使用什么技术。)
我想实现以下方法:
- 使用 SSL
- 使用 MAC 签署 REST 消息
我实现了一个测试用例,其中使用密码加密器( Similar to the example code here )和 PBKDF2WithHmacSHA1 进行签名。我花了一些时间才让签名正常工作,特别是因为我想将签名作为 URL 参数发送,并且必须对其进行两次编码才能获得正确的格式。
生成的签名是一个 byte[],我使用 org.apache.commons.codec.binary.StringUtils 将其转换为 UTF-8 编码的字符串,然后使用 java.net.URLEncoder 再次对其进行编码以获得正确的 URL 参数。该解决方案有效,但感觉有点愚蠢且过于复杂。
这段经历让我想到了这个问题,我想让我的客户能够轻松舒适地使用该服务,而且非常安全。那么,我应该选择什么加密算法作为我的签名呢?对于 Java、php、Ruby、C# 等最常见的 Web 平台来说,很容易实现,并且至少可以在不太常见的语言中使用。
最佳答案
byte[]
转换为十六进制字符串可能是用于签名的最简单的格式 - 十六进制字符 [0-9a-f] 不需要特殊编码。 Apache Commons 编解码器在 Hex
类下提供了转换方法。
HMAC-SHA256 是 HMAC 算法的黄金标准,应该存在于任何值得使用的平台上。
关于java - 签署 REST API 调用 : comon MAC algorithm for Java, php、Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340660/