我需要在 REST API 中实现消息级别的安全性,并且有一些顾虑和问题。我在这里找到了答案: Rest Web services 中的消息级别安全性
只是部分有用。
我们目前支持标准 SSL 传输安全性和多种身份验证方法,包括:
- 基本 http 身份验证(某些与我们的 API 对话的网络设备服务需要)
- 具有 SHA1 和 SHA256 风格的预共享密钥的 HMAC。
- 以 TLS 级别发送的客户端身份证书。
- SAML 2.0
为什么我们需要消息级别的安全性,因为:
- 客户行业包括医疗保健、金融和政府等,他们通常不赞成仅使用 SSL。
- 需要保证端到端的安全性。通过反向代理、SSL 加速器等...
- 通过服务传递的一些数据将包括非常敏感的数据。
- 需要为坚持认为 SOAP 的 WS-* 安全标准是“企业实力”Web 服务而 REST API 不是的客户提供一个好的答案。
如果客户端应用程序了解如何处理封装响应,我最初的想法是使用 PKCS#7 信封作为选项。
我希望客户端应用程序告诉 API 他们想要一个安全的响应,或者告诉 API 他们正在发布或发送的消息是安全的。
我真正的问题是,这应该通过媒体类型来传达吗?例如:
- 内容类型:application/vnd.resourcetype1+json+pkcs7
- 内容类型:txt/csv+pkcs7
我不想泄露有关被封装的媒体类型的信息。
它变得复杂,因为在某些情况下签名就足够了。其他人也需要加密。术语“pkcs7”对于如何构造信封是模糊的。
我希望客户端和服务器通过标准 HTTP 标头告诉对方他们正在发送的内容类型以及他们理解的内容类型。