Как обеспечить безопасность клиентского веб-токена JSON в приложении React Native?

Мы создаем приложение React Native для iOS и используем внутренний API, построенный на узле + экспресс + jsonwebtoken.

Когда пользователь входит в систему с именем пользователя и паролем, сервер проверяет эти учетные данные и отправляет клиенту обратно веб-токен JSON, который он затем должен отправлять вместе с каждым запросом API. Таким образом, нативное приложение React должно хранить этот токен.

Как безопасно хранить этот клиентский токен в нативном приложении React? Нужно ли предпринимать какие-либо дополнительные действия, кроме сохранения токена в переменной?


person Ryan    schedule 19.01.2016    source источник
comment
Чтобы сохранить конфиденциальную информацию в React-native, вы можете взглянуть на это: stackoverflow.com/a/45550361/7618742   -  person Julien Kode    schedule 09.08.2017


Ответы (3)


Для iOS вы должны хранить это в связке ключей... https://auth0.com/docs/libraries/lock-ios/save-and-refresh-jwt-tokens

Вот несколько способов сделать это в React Native, которые я нашел. Могут быть и другие. Возможно есть лучшие варианты. Это как раз то, что я нашел быстро.

https://github.com/search?utf8=%E2%9C%93&q=react-native+keychain

Для Android вы должны сохранить это либо в SharedPreferences или, может быть, даже лучше KeyStore, так как там он зашифрован.

person Chris Geirman    schedule 19.01.2016
comment
Привет, кто-нибудь, пожалуйста, помогите мне найти ресурс капота для JWT в реакции родной. Я думаю, вы, ребята, используете его, может ли кто-нибудь поделиться им, пожалуйста - person mychar; 05.07.2016

Чтобы не зависеть от приложения, я бы сохранил его с помощью ASyncStorage. На самом деле я тестирую это на новом проекте.

person James    schedule 16.04.2016
comment
хотя это не зашифровано - person Tom; 26.01.2017
comment
Хотя AsyncStorage хранит данные в незашифрованном виде, в зависимости от уровня безопасности, После этого может быть вариант. См. этот ответ: stackoverflow.com/a/39112472/747962 - person Daniel Bang; 23.05.2017

Недавно я создал менеджер цепочек ключей в React-Native, поэтому, возможно, я смогу вам помочь.

ПРИМЕЧАНИЕ. Это решение требует, чтобы ваше приложение работало на expo.

Чтобы зашифровать и хранить ваши токены локально на устройстве, вы можете использовать пакет под названием expo-secure. -магазин.

Это даст вам легкий доступ к цепочке ключей iOS и системе хранения ключей Android и может быть реализовано, как показано ниже:

import * as SecureStore from "expo-secure-store";

/**
 * Saves the value to the ios keychain or Android keystore
 * @param {string} key => the key you want to save the value for
 * @param {any} value => the value you want to encrypt
 * @return => A promise that will reject if value cannot be stored on the device.
 */
SecureStore.setItemAsync(key, value);

/**
 * Fetches the value from the keychain/keystore for the specified key
 * @param {string} key => the key you set for the value
 * @returns {any} => A promise that resolves to the previously stored value, or null if there is no entry for the given key.
 * The promise will reject if an error occurred while retrieving the value.
 */
SecureStore.getItemAsync(key);

/**
 * Saves the value to the ios keychain or Android keystore
 * @param {string} key => the key you want to save the value for
 * @param {any} value => the value you want to encrypt
 * @return => A promise that will reject if value cannot be stored on the device.
 */
SecureStore.deleteItemAsync(key);
person Ryan Forte    schedule 17.04.2020