在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);
答案 0 :(得分:2)
根据jwt.io文件,
每当用户想要访问受保护的路由或资源时,用户代理就应该使用Bearer架构发送JWT,通常在Authorization标头中。
因此,在Authorization标头中使用JWT应该由客户端使用,而不是服务器用于初始响应。
正确的方法是将令牌作为响应正文的一部分。我们使用
{ jwt: TOKEN }
为此类型计划。
然后,您可以通过response.json()
轻松访问它。
您可以使用response.headers.get(...)
直接访问标头值,但是您必须split
,substr
或正则表达式匹配才能获得实际令牌。
答案 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());
}