可以安全地在AsyncStorage中存储访问令牌?

时间:2017-05-30 15:10:49

标签: reactjs react-native

我正在考虑在React Native应用程序中存储用户访问令牌。最初我一直在看Redux但是我注意到RN有AsyncStorage,现在我假设在IOS的情况下这相当于NSUserDefaults。我可能错了。

这是存储访问令牌的好方法吗?如果我可以帮助它进行简单的数据存储,我真的不想完成使用Redux的过程。

4 个答案:

答案 0 :(得分:5)

AyncStorage可能不是一个好的解决方案,取决于服务器处理您的请求的方式。

但是你可以使用Redux和Redux-persist,使用你可以加密数据的transform参数,

https://github.com/rt2zz/redux-persist#transforms

密钥加密:https://github.com/maxdeviant/redux-persist-transform-encrypt

您仍将使用AsyncStorage,但这次使用加密层来保护您的数据

答案 1 :(得分:2)

Redux是关于数据流控制的。不一定是长期存储。如果您想保留redux数据,最终会使用AsyncStorage来执行此操作。

AsyncStorage在非越狱的iOS设备上进行沙盒处理。但是,数据没有以任何方式加密。

两个平台的更安全的解决方案似乎是https://github.com/pradeep1991singh/react-native-secure-key-store

答案 2 :(得分:0)

AsyncStorage对于敏感信息不安全。阅读更多here

在您的使用案例中,最好使用Firebase服务来获取令牌。 当应用程序启动时,您可以执行类似

的操作
var auth = firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    user.getIdToken().then(function(data) {
      console.log(data)
      // Save it redux, or component state(in that case you need to do this in every component where token will be used

     // Unsubscribe from listener 
     auth()
    });
  } else {
    // User is not authenticated
    // Unsubscribe from listener 
     auth()
  }
});

答案 3 :(得分:0)

react-native-keychain

这是安全的。另外,如果我没记错的话(在以下任何一项中都不要引用我),您可以使用它使用户能够登录该设备上的同一应用程序/网络应用程序;或其他设备。我还认为您可以与开发的其他应用程序共享登录详细信息,前提是这些应用程序在捆绑标识符中具有相同的域。