@auth0/angular-jwt :从解码的令牌中获取声明

问题描述

?我通过“@auth0/angular-jwt”进入我的 Angular 10 应用程序 JWT 令牌。在解码功能之后,我得到了这样的声明列表:

{
  http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: "johndoe",http://schemas.microsoft.com/ws/2008/06/identity/claims/role: "Manager",exp: 1525510870,iss: "http://localhost:5000",aud: "http://localhost:5000"
}

我如何通过打字稿获得自定义声明,例如:

{
  name: "johndoe",role: "Manager",}

? 谢谢。

解决方法

我找到了解决方案:

const token = {
  'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name': "johndoe",'http://schemas.microsoft.com/ws/2008/06/identity/claims/role': "Manager",'exp': 1525510870,'iss': "http://localhost:5000",'aud': "http://localhost:5000"
}

const decodedName = token['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name']
const decodedRole = token['http://schemas.microsoft.com/ws/2008/06/identity/claims/role']
console.log(decodedName)
console.log(decodedRole)
,

如果 JWT 由 3 个部分组成,则必须解码其中一个 从中间开始,即包含声明的主体,第一个 是一个标题,最后一个 - JWT 签名。

因此,拥有一个令牌,我们想获取它的声明,因此我们从中间解码该部分并将其解析为 json,这样我们就可以将声明作为该对象的字段进行访问。

let token = localStorage.getItem('token');
let decodedJWT = JSON.parse(window.atob(token.split('.')[1]));

console.log('name: ' + decodedJWT.name);
console.log('role: ' + decodedJWT.role);