首页 > 解决方案 > 在客户端加密字符串,以便服务器可以保证数据来自客户端并且不是用户生成的

问题描述

我们有一个 Xamarin.Forms(iOS 和 Android)应用程序和一个 Angular8 webapp,它们都与 .net core 2.2 webapi 进行通信。我们使用 JWT 不记名令牌身份验证来授权我们的用户对我们的 API 执行某些操作。

我现在需要的是能够加密/混淆在我们的 JSON 请求客户端中发送的部分数据,因此,当服务器接收到数据时,它可以验证数据是否来自我们的一个应用程序并且没有被手动生成并通过 PostMan 发送(例如)。

我一直在研究实现公钥加密,我们将公钥客户端存储在安全存储中,而私钥只能在服务器端使用,但我不确定这是否是首选方法。

需要明确的是,我们目前不打算实施完整的消息安全性。我们只是想确保用户不能在他们的机器上手动创建请求并将数据发送到我们的 API 而不使用我们的客户端应用程序。

感谢您的时间!!

标签: angularasp.net-web-apixamarin.forms.net-core

解决方案


Jwt 的主要优点之一是您确实可以验证令牌是由有效的提供者生成的。

令牌将包含一个keyid,它为您提供提供者[服务器]的公钥,您可以验证这一点。

有一些库可以让您在 Java 中轻松地做到这一点com.auth0jwtrsa

示例代码可能如下所示,

JwkProvider provider = new JwkProviderBuilder(new URL(<your-uri>)).build();

DecodedJWT decodedJWT = JWT.decode(jwt);
Jwk jwk = provider.get(decodedJWT.getKeyId());
RSAPublicKey pubKey = (RSAPublicKey) jwk.getPublicKey();
Algorithm algorithm = Algorithm.RSA256(pubKey, null);
Verification verifier = JWT.require(algorithm);
verifier.build().verify(decodedJWT);

推荐阅读