如何保护伙伴凭据从最终用户浏览器的API调用

问题描述 投票:1回答:1

球队,

我有一个要求,像我必须向我的伙伴(第三方)门户网站支持直接通过使API调用,从他们的浏览器证书给我们打电话。

e.g.) Partner portal browser makes AJAX Call with below:

      URL      ---> https://example.com/request
      HEADER   ---> user_id   : foo
      HEADER   ---> password  : mypasswd
      payload  ---> {
                       "request_time" : 2232876435,
                       "request_name" : "get_user_info",
                       ...
                       ...
                    }

而他们的浏览器/门户网站是访问/通过他们的不受信任的用户使用。所以,现在的问题是,因为呼叫是从前端;最终用户可以轻松地检查浏览器中看到我们已经给我们的合作伙伴在我们的身边,授权证书沿着网络API调用。

所以我打算问他们加密在其门户后端服务器的负载和标头,并呈现像下面的门户网站中的加密信息给予建议,以合作伙伴。

Encrypt (payload)   using mypasswd.
Encrypt (password)  using request_time  <NOW OPTIONAL TO PASS>

所以,现在,

e.g.) URL      ---> https://example.com/request
      HEADER   ---> user_name : foo
      HEADER   ---> password  : ENCRYPTED<mypasswd>  <-- OPTIONAL
      payload  ---> ENCRYPTED< 
                       {
                       "request_time" : 2232876435,
                       "request_name" : "get_user_info",
                       ...
                       ...
                       } 
                    >

因此,在我们的系统,我们将解密的有效载荷与USER_ID mypasswd检索foo。因此,如果解密成功,则该请求来自有效的资源。

现在结束门户用户无法了解从浏览器检查的要求。

笔记:

  1. 我不建议我的合作伙伴,从他们的后端调用。
  2. 从请求负载我可以找出重复通过独特的交易ID相同的请求,因此他们无法再次提交相同的请求。因此,避免重放攻击。

问题:

Q1)这个解决方案的任何缺陷或建议? Q2)是否有可能使用的密码是成功与否在Java中找出解密?我是新来加密,所以你可以请分享任何代码或链接实现这一目标?

你的想法,我非常有价值。

TLDR:

参考文献:

基本的加密细节

https://blog.storagecraft.com/5-common-encryption-algorithms/

https://www.veracode.com/blog/research/encryption-and-decryption-java-cryptography

https://gooroo.io/GoorooTHINK/Article/13023/The-difference-between-encryption-hashing-and-salting/2085#.W2L_KdgzZD0

Java的加密

How to encrypt and decrypt String with my passphrase in Java (Pc not mobile platform)?

Java Security: Illegal key size or default parameters?

确定解密成功通过此异常:

Given final block not properly padded

java encryption password-encryption
1个回答
1
投票

编辑:我误解了这个问题。如果信息是由第三方到达最终用户之前进行加密,然后这种方法一般是安全的。重放攻击是看出来的最主要的。如果所提出的要求是幂等,那么你并不真正需要担心,但除此之外,你可能需要与到期时间或类似的东西一起实施二手令牌短暂的数据库。


您正在解决这个问题的错误的方式。具有最终用户提出这一要求你代表的第三方是愚蠢的 - 如果请求来自他们的浏览器,然后通过定义,它们控制他们发送信息,并将其发送的方式。加密无助于解决这个问题,因为加密逻辑也是客户端。

这个问题的解决方法是,以消除最终用户。申请应直接从第三方来找你。这可能是从最终用户制作的第三方API的请求,也可能不是 - 这并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.