【问题标题】:Angular2 Set-Cookie JSESSIONID in HTTP requestsHTTP请求中的Angular2 Set-Cookie JSESSIONID
【发布时间】:2017-03-29 01:20:18
【问题描述】:

我正在使用 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));

【问题讨论】:

    标签: javascript java angular cookies jsessionid


    【解决方案1】:

    这是好的做法吗?

    不,这不是好习惯。

    来自 JWT 文档:

    在身份验证中,当用户使用其凭据成功登录时,将返回一个 JSON Web Token,并且必须保存在本地(通常在本地存储中,但也可以使用 cookie),改为在服务器中创建会话并返回 cookie 的传统方法。

    参考:https://jwt.io/introduction/https://jwt.io/introduction/

    JSESSIONID

    您需要知道浏览器中存储了多种类型的 cookie。其中许多可以通过 JS 代码访问,但其中一些是 httpOnly。这意味着浏览器能够在每个请求上透明地将它们附加到 JS 代码中(您不会在代码中看到 cookie)。服务器端JSESSIONID 的默认实现是httpOnly cookie 的示例。这种设计有多种安全原因 - 您页面上的 JS 恶意软件将无法从客户端窃取会话。

    标题

    myHeader.append('SET-COOKIE', 'JSESSIONID=&lt;jsessionid&gt;');

    这不是将 cookie 传递到服务器的有效方式。这是向客户端发送响应并在客户端上设置 cookie 的正确方法。如果要传递 cookie,可以使用:

    myHeader.append('Cookies', 'JSESSIONID=<jsessionid>');
    

    不过,这行不通。浏览器无论如何都会附加它自己的。 也就是说,JSESSIONID 应该由浏览器自动附加到您的请求中。如果这不起作用,则JSESSIONID cookie 未在浏览器中设置(检查 chrome 开发人员工具,您可以在应用程序选项卡中查看 cookie)或者您正在使用远程服务器 - 在与您的应用程序不同的端口/服务器/协议上(在这种情况下,CORS 会进入并破坏您的应用程序)。

    【讨论】:

      【解决方案2】:
      Easiest Solution
      
      constructor(public restProvider: RestProvider) { }
          intercept(request: HttpRequest<any>, next: HttpHandler):
              Observable<HttpEvent<any>> {
              if (this.restProvider.getToken() != null) {
                  const clonedRequest = request.clone({
                      headers: request.headers.set('X-Requested-With', 'XMLHttpRequest')
                  });
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 2017-12-22
        • 2017-07-21
        • 1970-01-01
        • 2015-11-12
        • 2015-10-29
        • 2020-10-27
        • 2010-11-26
        • 2020-03-09
        相关资源
        最近更新 更多