React native 在React Native中将持久会话的访问令牌设置为redux状态安全吗?

React native 在React Native中将持久会话的访问令牌设置为redux状态安全吗?,react-native,redux,React Native,Redux,我正试图找出一种安全的方法,在react native中持久化会话 我有一些敏感数据,比如从服务器检索到的访问令牌,我计划将其设置为redux状态 我不确定将敏感数据(如accessToken设置为redux状态)是否安全 如果不安全,我是否应该将accessToken保存到设备存储器中,并在每个屏幕请求和服务器请求上加载accessToken dispatch({type: LOGIN_SUCCESS, payload: {refreshToken, authTimestamp, email}

我正试图找出一种安全的方法,在react native中持久化会话

我有一些敏感数据,比如从服务器检索到的访问令牌,我计划将其设置为redux状态

我不确定将敏感数据(如
accessToken
设置为redux状态)是否安全

如果不安全,我是否应该将
accessToken
保存到设备存储器中,并在每个屏幕请求和服务器请求上加载
accessToken

dispatch({type: LOGIN_SUCCESS, payload: {refreshToken, authTimestamp, email} });

是的,如果您打算存储
accessToken
,则应将其保存在设备安全存储中。
refreshttokens
可能永远不会离开您的服务器,因为这可能是持续生成新的
accessTokens
的安全漏洞

您可以每次加载
accessToken
。另一种选择是将
accessToken
存储在一个安全的cookie中,并将其传递回应用程序,这样您就不必担心令牌的管理


然后是一个如何填充的问题,通常与身份验证服务和授权提供者集成。这是保护应用程序安全的两个不同的附加步骤。我假设您已经有现成的解决方案(如果不发表评论,我将在这里添加一些示例)

是的,它是安全的。但我想添加一些注释:我认为redux状态不会存储它(除非您使用redux状态持久化),这意味着,当您退出应用程序时,您将失去访问令牌。如果您想存储它(这样用户就不必再次登录),我建议将其存储在react native keychain中,从中读取并设置为应用程序启动时的状态。我在mongoDB中存储了
refreshToken
accessToken
,我不知道是否应该将两者都存储在
react native keychain
中。或者只将
refreshttoken
存储到
react native keychain
中,然后将
accessToken
加载到redux状态。
refreshttoken
accessToken
存储在mongoDB中
newUser.refreshToken=wait newUser.\u id.toString()+'.+crypto.randomBytes(64).toString('hex');newUser.accessToken=newUser.\u id.toString()+'.+crypto.randomBytes(64).toString('hex')
Hi,我目前正在遵循本指南的流程,我在考虑是否应该将
refreshToken(6个月后过期)
保存到设备存储器中,并使用
refreshToken
生成
accessToken(20分钟后过期)
refreshttoken
accessToken
都将存储在mongoDB中,也存储在设备存储器中。express服务器的受保护路由将比较并检查设备存储中的
accessToken(20分钟后过期)
是否与用户的mongoDB
accessToken
中的匹配。我不确定我使用
refreshToken
accessToken
的方法是否冗余,因为它仍然需要为每个需要访问令牌验证的请求使用服务器进行验证。我还正在寻找一种解决方案,以便在本机应用程序和web上安全地验证令牌。对于本机应用程序,我使用
react native device info
npm中的
DeviceInfo.getUniqueId()。对于web,似乎没有办法获得不改变的唯一设备id。IP和MAC地址都可以更改。我将重复这一点,
刷新令牌
不应发送到设备。
const INITIAL_STATE = {    
    token: {      
        accessToken: '',          
        loading: false,
        error: ''
    }
};