Зашифруйте строку на стороне клиента, чтобы сервер мог гарантировать, что данные поступают от клиента и не были сгенерированы пользователем - PullRequest
1 голос
/ 13 января 2020

У нас есть приложение Xamarin.Forms (iOS и Android) и веб-приложение Angular8, которые оба взаимодействуют с веб-интерфейсом. net core 2.2. Мы используем аутентификацию токенов на предъявителя JWT, чтобы предоставить нашим пользователям возможность выполнять определенные действия с нашим API.

Теперь мне нужно иметь возможность шифровать / обфускировать часть данных, отправляемых в наших JSON запросах на стороне клиента. поэтому, когда сервер получает данные, он может проверить, что данные происходят из одного из наших приложений и не были сгенерированы вручную и отправлены через PostMan (например).

Я изучал реализацию публикации c ключ шифрования, где мы будем хранить клиентскую часть публичного ключа в безопасном хранилище, а закрытый ключ будет доступен только на стороне сервера, но я не уверен, является ли это предпочтительным методом.

Просто чтобы прояснить, мы не стремимся реализовать полную безопасность сообщений на этом этапе; мы просто хотим убедиться, что пользователь не может вручную создать запрос на своем компьютере и отправить данные в наш API без использования нашего клиентского приложения.

Спасибо за ваше время !!

1 Ответ

0 голосов
/ 14 января 2020

одно из главных преимуществ Jwt заключается в том, что вы действительно можете проверить, что токен был сгенерирован действующим провайдером.

Токен будет содержать keyid, что дает Вы публикуете c ключ провайдера [сервера], и вы можете это проверить.

Существуют библиотеки, которые позволят вам легко это сделать в Java - com.auth0: jwt и rsa .

пример кода может выглядеть следующим образом:

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);
...