问题描述
?我通过“@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);