В javascript у меня есть метод, который аутентифицируется на моем сервере с помощью HTTP-запроса.
Ответные данные с моего сервера отправляют 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);
Согласно документу jwt.io,
Всякий раз, когда пользователь хочет получить доступ к защищенному маршруту или ресурсу, пользовательский агент должен отправить JWT, как правило, в заголовок авторизации, используя схему Bearer.
Поэтому использование JWT в заголовке авторизации предполагается использовать клиентом, а не сервером для первоначального ответа.
Правильный способ - получить токен как часть тела ответа. Мы используем
{ jwt: TOKEN }
тип схемы для этого. Затем вы можете легко получить к нему доступ через ваш response.json()
.
Вы можете получить доступ к значению заголовка напрямую с помощью response.headers.get(...)
но тогда вам нужно будет split
, substr
или повторить сравнение, чтобы получить фактический токен.
Когда вы получаете токен с сервера, установите его в хранилище сеанса браузера/локальном, например, ниже
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());
}