java - 签署 REST API 调用 : comon MAC algorithm for Java, php、Ruby

标签 java security rest cryptography playframework-2.0

我想使用消息身份验证代码 (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/

相关文章:

c# - java 与 c# - 哪个在安全性方面更安全?

angularjs - Angular $http.delete 返回错误 422(无法处理的实体)

找不到 javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION

java - 如何在 Java Swing 中为多个按钮添加多个 ActionListener

java - 使用 TextField 更新标签时出现奇怪的行为(JavaFX8 中的可能错误)?

java - 双重打印JList

asp.net - wcf 使用 basichttpBinding 实现用户名和密码安全 - 基于消息

c# - "Security Models"有多少种?

c# - 通过rest上传json字符串时出现403(c#)

ruby-on-rails - Restful 设计的建议?