Как декодировать JWT кодированную полезную нагрузку токена на стороне клиента в угловом 5?

Я получаю один JWT-кодированный токен доступа из моего API в ответ. Но я не могу его расшифровать и получить в формате JSON. Я попытался использовать для этого библиотеку angular2-jwt, но это не сработало. Я пишу свой код ниже:

 setXAuthorizationToken(client){
    let requestHeader = new Headers();
    requestHeader.append('Content-Type', 'application/x-www-form-urlencoded');
    this.http.post(client.clientURL + "oauth/token", 'grant_type=password&client_id=toto&client_secret=sec&' +  'username=' + client.username
    + '&password=' + client.password, {
      headers: requestHeader
    }).map(res=>res.json())
    .subscribe((token) =>{
      if(!token.access_token){
          return;
      }
      else{
       var decompressToken = LZString.decompressFromEncodedURIComponent(token.access_token);
       console.log(decompressToken);




}


    });
    }

Может ли кто-нибудь помочь мне решить эту проблему?

Ответы

Ответ 1

Я использую jwt-decode для декодирования JWT-токена в угловом 5; этот пакет работает со мной хорошо.

после установки пакета через эту команду:

npm install jwt-decode

импортируйте этот пакет в свой класс TypeScript с помощью этого синтаксиса:

import * as jwt_decode from "jwt-decode";

и использовать этот метод библиотеки для декодирования вашего токена доступа, как это

  getDecodedAccessToken(token: string): any {
    try{
        return jwt_decode(token);
    }
    catch(Error){
        return null;
    }
  }

Параметр token определяет ваш токен доступа, который получает от вашего API

jwt_decode метод возвращает декодированную информацию токена как объект; вы можете получить доступ к любой информации в токен.

Пример:

let tokenInfo = this.getDecodedAccessToken(token); // decode token
let expireDate = tokenInfo.exp; // get token expiration dateTime
console.log(tokenInfo); // show decoded token object in console

jwt-decode - небольшая библиотека браузера, которая помогает декодировать токены JWTs, которые кодируются Base64Url.

ВАЖНО: эта библиотека не проверяет токен, любая хорошо сформированная JWT может быть расшифрована. Вы должны проверить маркер в своей логике на стороне сервера, используя что-то вроде express-jwt, koa-jwt, Owin Bearer JWT и т.д.

Ответ 2

Использовать @auth0/angular-jwt


Шаг - 1: установить с использованием npm

npm install @auth0/angular-jwt


Шаг - 2: импортируйте пакет

import { JwtHelperService } from '@auth0/angular-jwt';


Шаг 3. Создайте экземпляр и используйте

const helper = new JwtHelperService();

const decodedToken = helper.decodeToken(myRawToken);

// Other functions
const expirationDate = helper.getTokenExpirationDate(myRawToken);
const isExpired = helper.isTokenExpired(myRawToken);

Ответ 3

Попробуйте использовать встроенную функцию JavaScript atob(). Примерно так:

atob(token.split('.')[1])

Примечание. Токен на самом деле является строкой.

Если вы хотите узнать, почему я разделил токен здесь, вам следует посетить этот сайт jwt.io.