1

我正在开发一个项目,其中两方可以各自向对方发出 API 请求,并使用共享密钥进行身份验证。对方希望共享的秘密在两种方式都相同,但我不明白这将如何工作。所以我要么在寻找如何安全地做到这一点的解释,要么找出这是否不可能,并且共享的秘密应该根据请求的方向而有所不同。

如果 API 请求只是在一个方向进行,我会使用密钥定义的函数对密码进行加盐,并存储散列和加盐,然后我可以通过在每个请求上生成和匹配散列来验证用户。但是,如果我需要使用相同的共享密钥向其他 API 发出请求,那么似乎我需要以可以解密的方式存储密码,这似乎是错误的/不可能的。

有没有办法做到这一点,或者共享秘密是否应该根据请求的方向而有所不同?

4

1 回答 1

0

你的分析是正确的。如果双方都可以是调用者,那么双方都需要知道秘密(不仅仅是能够验证它)。

有两个单独的键(每个调用者一个,在这个用例中你不妨称它们为“密码”)似乎是一个合理的默认设置。

想到“各方”并给每个人自己的凭据总是好的,特别是如果以后会涉及更多的各方。使以后撤销个人访问权限变得更加容易,以实施细粒度的访问控制,并最大限度地减少泄露凭据的影响(攻击者只能冒充该一方,而不是系统中的任何其他人)。

只有一个可能看起来更容易管理,但是你有责任不泄露其他人的密钥(除了你自己的)。我会尽量避免这种额外的负担。

于 2016-10-29T01:40:19.453 回答