我正在尝试保护使用 Spring MVC 开发的 REST API。
在谷歌搜索中,我发现了这个链接。
这是最好的方法吗?它使用数字证书吗?还是仅用于基于 SOAP 的 Web 服务的数字证书?
如果 REST 身份验证有更好的选择,也请指出我。
这是最好的方法吗?
什么是“最好的”取决于您的要求。这种方法的好处是
不太好:
它使用数字证书吗?
没有。不涉及证书。除了可能用于向您提供秘密访问密钥的 SSL 连接。
还是仅用于基于 SOAP 的 Web 服务的数字证书?
不对。您可以将 https (SSL) 用于 REST,这通常涉及服务器提供证书以对自身进行身份验证。您还可以对其进行配置,以便客户端必须使用 SSL 使用证书对自己进行身份验证。这将是一个不错的解决方案,但在客户端实现起来相当棘手。这不是火箭科学,但阅读和理解证书以及私钥和公钥的处理可能会很棘手。您还需要一些受信任的根 CA,如果您使用已建立的 CA 之一,这要么需要大量工作,要么使用起来相当昂贵。当我在一家大公司的内部服务工作时,我会考虑这种方法。他们通常已经拥有这种基础设施。
如果 REST 身份验证有更好的选择,也请指出我。
如上所述:对于大多数服务来说,这是一个非常好的方法。将 PKI 与客户端证书一起使用是一种替代方法,在某些设置中效果更好。
您可以像这样模拟公钥/私钥身份验证
你需要两个基本的东西!
UserId / Application Id(检查此应用程序是否允许访问此应用程序)(私钥)
API 的随机密钥(用于检查此方法是否允许用于随后经过身份验证的应用程序)
Rest服务(服务器端)将通过“应用程序ID”记录所有允许的应用程序
现在你可以在你自己的算法中使用这两个键。例如,您可以从中创建一个简单的 HASH。
场景是,您正在使用公钥(您的 API 随机密钥)加密您的 API。调用该方法的客户端正在使用他的私钥(应用程序 ID)解密
当客户端发送他的Application Id 时,您可以从他的Application Id 和API 随机密钥生成HASH,并确保允许该应用程序调用该方法。
这里的优点是: 1. Server端可以改变加密算法,客户端不用担心
服务器可以更改方法加密(公钥),客户端无需担心
客户端不能更改私钥(应用程序 ID)。如果他更改,服务器将拒绝它。否则,未注册的应用程序无法访问 Rest Service