@auth0/angular-jwt : 从解码的令牌中获取声明
Posted
技术标签:
【中文标题】@auth0/angular-jwt : 从解码的令牌中获取声明【英文标题】:@auth0/angular-jwt : Get claims from decoded token 【发布时间】:2021-04-21 07:56:04 【问题描述】:?我通过“@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"
我如何通过 typescript 获得自定义声明,例如:
name: "johndoe",
role: "Manager",
? 谢谢。
【问题讨论】:
【参考方案1】:我找到了解决办法:
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)
【讨论】:
【参考方案2】:如果 JWT 由 3 部分组成,则您必须对其中的部分进行解码 从中间开始,即包含声明的主体,第一个 是一个标头,最后一个 - JWT Signature。
因此,有了一个令牌,我们想要获取它的声明,所以我们从中间解码部分并将其解析为 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);
【讨论】:
以上是关于@auth0/angular-jwt : 从解码的令牌中获取声明的主要内容,如果未能解决你的问题,请参考以下文章
text 安装@ auth0 / angular-jwt后出错
使用 JWT 对 Angular Universal 进行身份验证
Angular 6 中的 AuthHttp(从 Angular2 迁移到 Angular6)