Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REST认证-数字签名?_Java_Security_Rest - Fatal编程技术网

Java REST认证-数字签名?

Java REST认证-数字签名?,java,security,rest,Java,Security,Rest,我正试图保护使用SpringMVC开发的RESTAPI 在谷歌搜索上,我遇到了这个问题 这是最好的方法吗?它使用数字证书吗?还是仅用于基于SOAP的Web服务的数字证书 还请告诉我是否有更好的REST身份验证替代方案。您可以像这样模拟公钥/私钥身份验证 你需要两件基本的东西 用户Id/应用程序Id(检查此应用程序是否允许访问此应用程序)(私钥) API的随机密钥(用于检查此方法是否允许用于当时经过身份验证的应用程序) Rest服务(服务器端)将通过“应用程序ID”记录所有允许的应用程序 现在您可

我正试图保护使用SpringMVC开发的RESTAPI

在谷歌搜索上,我遇到了这个问题

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


还请告诉我是否有更好的REST身份验证替代方案。

您可以像这样模拟公钥/私钥身份验证

你需要两件基本的东西

  • 用户Id/应用程序Id(检查此应用程序是否允许访问此应用程序)(私钥)

  • API的随机密钥(用于检查此方法是否允许用于当时经过身份验证的应用程序)

  • Rest服务(服务器端)将通过“应用程序ID”记录所有允许的应用程序

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

    这种情况是,您正在使用公钥(API随机密钥)加密API。 调用该方法的客户端正在使用其私钥(应用程序ID)进行解密

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

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

  • 服务器可以更改加密方法(公钥),客户机不必担心这一点

  • 客户端无法更改私钥(应用程序ID)。如果他更改,服务器将拒绝它。换句话说,未注册的应用程序无法访问Rest服务

  • 这是最好的方法吗

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

    • 相当容易实现
    • 只要机密访问密钥保持机密,就没有明显的漏洞
    不太好:

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

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

    还是仅用于基于SOAP的Web服务的数字证书

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

    还请告诉我是否有更好的REST身份验证替代方案


    如上所述:对于大多数服务来说,这是一种非常好的方法。使用带有客户端证书的PKI是另一种选择,在某些情况下更好

    非常感谢Jens Schauder和@MadhailSilence为我们的应用程序提供的用户名/密码(例如admin/admin123)存储在数据库中。我如何为上述内容生成访问密钥和秘密访问密钥。有什么标准吗?一旦生成,我将在数据库中保存这两个。亚马逊有如下类似的东西,访问密钥-Aikikhmzwu7uql3l43a秘密访问密钥-6lhqye32gqscsfacqbj3kioujqzzeyswbsdasdownever在数据库中存储密码!存储哈希代码。您可以并且应该使用随机数生成器创建API密钥。因为这将被放在应用程序中,所以它不必很容易记忆或做任何事情。