Как получить токен на предъявителя из заголовка авторизации в Javascript (Angular2 / 4)?

1

В 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);
Теги:
angular
jwt
header

2 ответа

2
Лучший ответ

Согласно документу jwt.io,

Всякий раз, когда пользователь хочет получить доступ к защищенному маршруту или ресурсу, пользовательский агент должен отправить JWT, как правило, в заголовок авторизации, используя схему Bearer.

Поэтому использование JWT в заголовке авторизации предполагается использовать клиентом, а не сервером для первоначального ответа.

Правильный способ - получить токен как часть тела ответа. Мы используем

 { jwt: TOKEN } 

тип схемы для этого. Затем вы можете легко получить к нему доступ через ваш response.json().

Вы можете получить доступ к значению заголовка напрямую с помощью response.headers.get(...) но тогда вам нужно будет split, substr или повторить сравнение, чтобы получить фактический токен.

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());
        }
  • 0
    Спасибо за это, я понимаю это точно, однако ... прежде чем я могу установить токен в sessionStorage, как мне получить его из заголовка "Авторизация"? Мой сервер отправляет токен в заголовке так же, как вы показываете мне, как отправить его на сервер ...
  • 0
    Ты имеешь ввиду? Вы хотите получить токен из заголовка API в Angular2?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню