Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs JWT本地存储与Cookie_Reactjs_Asp.net Core_Cookies_Jwt - Fatal编程技术网

Reactjs JWT本地存储与Cookie

Reactjs JWT本地存储与Cookie,reactjs,asp.net-core,cookies,jwt,Reactjs,Asp.net Core,Cookies,Jwt,我读过很多关于在哪里存储JWT的文章,似乎有很多人支持本地存储与Cookie的争论 Microsoft谈到基于令牌的身份验证: 要在后续请求中发送令牌,请将令牌存储在 浏览器的本地存储。不要担心CSRF漏洞 如果令牌存储在浏览器的本地存储器中。CSRF是一个 令牌存储在cookie中时的问题 虽然post等强烈提倡使用cookie: 我今天看到的最大的安全违规者是我们这些 本地存储中的JWTs(会话数据)。许多人没有意识到这一点 JWT本质上与用户名/密码相同 我想创建一个API,可供SPA和移

我读过很多关于在哪里存储JWT的文章,似乎有很多人支持本地存储与Cookie的争论

Microsoft谈到基于令牌的身份验证:

要在后续请求中发送令牌,请将令牌存储在 浏览器的本地存储。不要担心CSRF漏洞 如果令牌存储在浏览器的本地存储器中。CSRF是一个 令牌存储在cookie中时的问题

虽然post等强烈提倡使用cookie:

我今天看到的最大的安全违规者是我们这些 本地存储中的JWTs(会话数据)。许多人没有意识到这一点 JWT本质上与用户名/密码相同

我想创建一个API,可供SPA和移动应用程序访问

我的理解是,SPA可以/应该使用具有以下特征的饼干:

new CookieOptions
{
  HttpOnly = true,
  SameSite = SameSiteMode.Strict,
  Secure = true
}
而移动应用程序会将JWT存储在设备上,并将其添加到每个请求的授权头中,因为它没有Cookie的概念

在以前的项目中,我在SPA中使用过从令牌解析用户信息(例如角色)。如果我使用的是HttpOnly cookie,因为我无法访问令牌,那么这将如何工作


简言之,将JWT存储在本地存储中是否安全,还是应该始终使用cookie。如果需要cookie,如何在客户端应用程序中确定用户的角色等?

使用“js cookie”模块设置cookie非常常见。下面是我如何将其与jwt一起使用的示例

 setSession(authResult) {
// Set the time that the Access Token will expire at
const expiresAt = authResult.expiresIn * 1000 + new Date().getTime();
// this.accessToken = authResult.accessToken;
this.idToken = authResult.idToken;
this.expiresAt = expiresAt;
Cookies.set("user", authResult.idTokenPayload);
Cookies.set("jwt", authResult.idToken);
Cookies.set("expiresAt", expiresAt);

// navigate to the home route
}

logout() {
Cookies.remove("user");
Cookies.remove("jwt");
Cookies.remove("expiresAt");
const auth = this.auth0;

auth.logout({
  returnTo: "",
  clientId: "awdf8adsf98blahblah"
});
}

使用“js cookie”模块设置cookie非常常见。下面是我如何将其与jwt一起使用的示例

 setSession(authResult) {
// Set the time that the Access Token will expire at
const expiresAt = authResult.expiresIn * 1000 + new Date().getTime();
// this.accessToken = authResult.accessToken;
this.idToken = authResult.idToken;
this.expiresAt = expiresAt;
Cookies.set("user", authResult.idTokenPayload);
Cookies.set("jwt", authResult.idToken);
Cookies.set("expiresAt", expiresAt);

// navigate to the home route
}

logout() {
Cookies.remove("user");
Cookies.remove("jwt");
Cookies.remove("expiresAt");
const auth = this.auth0;

auth.logout({
  returnTo: "",
  clientId: "awdf8adsf98blahblah"
});
}

我使用jsonwebtoken、js cookie、auth0 js一起处理身份验证。我使用jsonwebtoken、js cookie、auth0 js一起处理身份验证。Randall Degges的线程说它不安全,因为
XSS
。但据我所知,如果有人能够将js脚本注入你的网站,他也能够完成真正用户可以完成的大部分工作。在这种情况下,没有任何东西是安全的,包括cookie。Cookie&Session有时有效。但问题是,如果我们有多台服务器需要共享这些cookie和会话,该怎么办?我相信Jonathan Gros Dubois的评论很好。Randall Degges的帖子说它不安全,因为
XSS
。但据我所知,如果有人能够将js脚本注入你的网站,他也能够完成真正用户可以完成的大部分工作。在这种情况下,没有任何东西是安全的,包括cookie。Cookie&Session有时有效。但问题是,如果我们有多台服务器需要共享这些cookie和会话,该怎么办?我相信Jonathan Gros Dubois的评论很好。