如何从Javascript(Angular2 / 4)中的授权标头中检索承载令牌?

时间:2017-06-12 10:48:16

标签: javascript angular header jwt

在javascript中,我有一个方法,可以通过http post请求成功验证我的服务器。

我服务器的响应数据是在Authorization标头中发送JWT,如下所示:

Authorization: Bearer mytoken12345abc

我可以从我的服务器响应数据中成功检索授权标头,例如:

let authheader = response.headers.get('Authorization');

但我如何解析这个?是"持票人"关键?所以像:

let token = authheader.Bearer 

显然不正确......任何人都可以提供任何帮助吗?

换句话说,以下是最好的方法吗?

let token = response.headers.get('Authorization');
let parsedToken = token.slice(7);

2 个答案:

答案 0 :(得分:2)

根据jwt.io文件,

  

每当用户想要访问受保护的路由或资源时,用户代理就应该使用Bearer架构发送JWT,通常在Authorization标头中。

因此,在Authorization标头中使用JWT应该由客户端使用,而不是服务器用于初始响应。

正确的方法是将令牌作为响应正文的一部分。我们使用

 { jwt: TOKEN } 

为此类型计划。 然后,您可以通过response.json()轻松访问它。

您可以使用response.headers.get(...)直接访问标头值,但是您必须splitsubstr或正则表达式匹配才能获得实际令牌。

答案 1 :(得分:0)

当您从服务器获取令牌时,将其设置为浏览器会话/本地存储,如下所示

sessionStorage.setItem('token', authheader);

每当你在服务器中调用服务器设置授权令牌时,它就是一种安全的方式,如下面的

import { Http, Headers, RequestOptions, Response } from '@angular/http';
   getUser(){

            let headers = new Headers({ 'Authorization': 'Bearer ' + sessionStorage.getItem('token') });
            let options = new RequestOptions({ headers: headers });

            // get users from api
            return this.http.get('http://localhost:9000/api/user', options)
                .map((response: Response) => response.json());
        }