如何以原生方式存储令牌?

Pus*_*tha 16 react-native

我曾经在android中开发过以前我习惯使用SharePreference来存储用户令牌.ios和android有什么可用的原生作用吗?

小智 17

如果您正在使用create-react-native-appexp,则可以Expo.SecureStore用来存储令牌.

import {SecureStore} from 'expo';

await SecureStore.setItemAsync('secure_token','sahdkfjaskdflas$%^&');
const token = await SecureStore.getItemAsync('secure_token');
console.log(token); // output: sahdkfjaskdflas$%^&
Run Code Online (Sandbox Code Playgroud)

详情:https://docs.expo.io/versions/latest/sdk/securestore

  • SecureStore 在 iOS 和 Android 上运行良好,但在 expo.io 中的 Web 上表现不佳:“SecureStore.setItemAsync 在 Web 上不可用” (2认同)

fla*_*aky 11

作为其他答案的补充,您可能需要在存储令牌时考虑在用户设备上加密令牌。

因此,除了通过AsyncStorage存储它之外,您可能还想使用类似以下方法:react-native-keychain在设备上对其进行加密。


sag*_*r.a 9

你可能想使用AsyncStorage

因为AsyncStorage现在已弃用。您可以使用https://github.com/react-native-community/async-storage

编辑:

对于指出 AsyncStorage 不安全的每个人,请参阅这篇文章

  • 这不安全,请不要用它来存储令牌或其他敏感数据。 (18认同)
  • 在 asyncStorage 中保存数据是安全的,请参考这个答案 /sf/ask/2732012881/ (3认同)
  • 只是想指出,只要攻击者无法物理访问设备以及密码或受信任的计算机,异步存储就是安全的。如果是这种情况,攻击者无论如何都可以简单地消耗设备中的令牌。话虽这么说,加密也没什么坏处。 (3认同)
  • React Native 官方网站说:“不要将异步存储用于......令牌存储”。请检查此处:https://reactnative.dev/docs/security#async-storage (2认同)

Kev*_*Lee 9

以下是一些在 React Native 中存储持久数据的方法:

  • async-storage存储未加密的键值数据。不要使用异步存储来存储令牌、秘密和其他机密数据。一定要使用异步存储来持久化 Redux 状态、GraphQL 状态和存储全局应用程序范围的变量。

  • react-native-keychain以字符串格式将用户名/密码组合存储在安全存储中。存储/访问它时使用 JSON.stringify/JSON.parse。

  • react-native-sensitive-info - 适用于 iOS,但使用适用于 Android 的 Android 共享首选项(默认情况下不安全)。然而,有一个fork ) 使用 Android Keystore。

  • redux-persist-sensitive-storage - 包装 react-native-sensitive-info

有关React Native 存储和安全性的更多信息


Art*_*rev 8

使用博览会安全商店

// to install it 'expo install expo-secure-store'

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

const setToken = (token) => {
    return SecureStore.setItemAsync('secure_token', token);
};

const getToken = () => {
    return SecureStore.getItemAsync('secure_token');
};

setToken('#your_secret_token');
getToken().then(token => console.log(token)); // output '#your_secret_token'
Run Code Online (Sandbox Code Playgroud)