Redux是存储JWT令牌的安全场所吗?

Hir*_*oki 4 cookies html5 redux

我一直在自学Redux,想知道在Redux状态下存储JWT令牌有多安全。

例如,这是一个负责设置和重置令牌的减速器。

export default function loginReducer(state = {
    token: "",
}, action) {
switch (action.type) {
    case "SET_TOKEN":
        {
            return {
                ...state,
                token: action.data,
            }
            break;
        }
    //other cases here
    return state
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以按照以下方式存储令牌。

    handleSubmit(values) {
        //Calling an API to get a token.
    }).then((response) => {
            response.json().then((jsonReponse) => {         
             //This is where the token is stored!
        this.props.dispatch(loginAction.setToken(jsonReponse.token));
            });
        });
    }
Run Code Online (Sandbox Code Playgroud)

使用Redux的主要目的是在一个地方组织状态,因此我认为在这里维护令牌是合理的。

但是,我还没有找到一个好的信息资源来说明这样做的安全性/脆弱性。

(我发现了几篇有关localStorage vs Cookies的文章。 据我研究,显然Cookie是存储令牌的安全场所)

任何建议将被认真考虑!

KA0*_*A01 6

您可以将JWT存储在Redux中,我在那里可以看到您的动机,但请考虑以下因素:

  • 当页面刷新或用户离开站点并返回时,JWT丢失了。您将如何找回它?从服务器请求另一个?

只要遵循Web安全性和JWT令牌的所有最佳做法(即设置expiry),就不必担心将JWT存储在哪里(本地存储或cookie )。

我已经将它们个人存储在本地存储和cookie中。Cookies似乎是一个更好的选择。

  • @JasonNoronha 基本上是 localStorage (5认同)
  • 如果用户离开站点并稍后返回,“redux-persist”可用于保留令牌 (3认同)

Mic*_*son 5

将其存储在客户端的实际位置并不重要。如果恶意代码通过XSS攻击进入,则没有什么是真正安全的。如果恶意代码无法入侵,那么没有什么是真正不安全的。只是不要让用户彼此共享商店,而要做​​其他通常是安全实践的事情。