我正在使用auth0 / angular2-jwt库在每个请求上附加JWT.
我想知道如何在每个请求上添加JSESSIONID cookie,以便进入服务器端会话?
这是一个好习惯吗?
我试过这个没有成功
let myHeader = new Headers();
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');
this.authHttp.get(endpoint, {headers: myHeader, withCredentials: true}).map(res => res.json()).subscribe(
jwt => {
...
},err => console.log(err));
解决方法:
这是好习惯吗?
不,这不是好习惯.
来自JWT文档:
In authentication, when the user successfully logs in using their credentials, a JSON Web Token will be returned and must be saved locally (typically in local storage, but cookies can be also used), instead of the traditional approach of creating a session in the server and returning a cookie.
参考:https://jwt.io/introduction/https://jwt.io/introduction/
JSESSIONID
您需要知道浏览器中存储了多种类型的Cookie.其中许多都可以从JS代码访问,但其中一些是httpOnly.这意味着浏览器能够在JS代码上透明地附加每个请求(您不会在代码中看到cookie).服务器端JSESSIONID的默认实现是httpOnly cookie的示例.这种设计存在多种安全原因 – 页面上的JS恶意软件将无法从客户端窃取会话.
头
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');
这不是将cookie传递给服务器的有效方法.这是向客户端发送响应并在客户端上设置cookie的正确方法.如果要传递cookie,可以使用:
myHeader.append('Cookies', 'JSESSIONID=<jsessionid>');
不过,这不起作用.浏览器无论如何都会附加自己的.
这就是说,JSESSIONID应该由浏览器自动附加到您的请求中.如果这不起作用,JSESSIONID cookie不会在浏览器中设置(检查chrome开发人员工具,您可以在应用程序选项卡中查看cookie)或者您正在使用远程服务器 – 在不同的端口/服务器/协议上而不是您的应用程序(然后在这种情况下,CORS进入并破坏您的应用程序).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。