応答で、APIから1つのJWTエンコードアクセストークンを取得しています。しかし、それをデコードして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);
}
});
}
誰でもこの問題の解決を手伝ってくれますか?
angular 5のJWTトークンをデコードするためにjwt-decode
パッケージを使用します。このパッケージでうまくいく。
このコマンドでパッケージをインストールした後:
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は、Base64UrlでエンコードされたJWTトークンのデコードに役立つ小さなブラウザライブラリです。
重要:このライブラリはトークンを検証しません。整形式のJWTはデコードできます。 express-jwt、koa-jwt、Owin Bearer JWTなどを使用して、サーバー側のロジックでトークンを検証する必要があります。
@ 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);
関数atob()
のJavaScriptビルドを試して使用してください。このようなもの:
atob(token.split('.')[1])
注:トークンは実際には文字列です。
ここでトークンを分割した理由を知りたい場合は、このWebサイト jwt.io を確認してください。