从 Javascript 中的 JWT 中提取“角色”

Posted

技术标签:

【中文标题】从 Javascript 中的 JWT 中提取“角色”【英文标题】:Extract 'Roles' from a JWT in Javascript 【发布时间】:2018-12-16 17:27:07 【问题描述】:

我创建了一个令牌并将其发送到我的客户端应用程序 (ReactJS)。


  UserId: "1",
  http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: "Unset",
  http://schemas.microsoft.com/ws/2008/06/identity/claims/role: Array(2), 
  exp: 1531116565,
  iss: "http://www.example.com", 
…

角色项如下所示:

[ 0: "User", 1, "Admin" ]

我不确定为什么我的角色项被命名为 URL。但我要做的是确定 JWT 是否指示用户具有管理员角色。

如何检查角色数组中的“管理员”?

【问题讨论】:

是数组对象或字符串中的项目,并且某些东西正在奇怪地呈现输出?第二项中的键和逗号而不是冒号之类的索引使其难以确定。 【参考方案1】:

可能是这样的:

const token = localStorage.getItem("x-access-token");

const role = JSON.parse(window.atob(token.split(".")[1])).role;

【讨论】:

【参考方案2】:

你可以试试这个

const roles = [
  0: "User", 1: "Admin"
];
let isAdmin = false;
roles.map( role => 
  let r = Object.values( role )
  if ( r[0] == 'Admin' ) 
    isAdmin = true
  
)

console.log( isAdmin );

【讨论】:

谢谢@GansPotter - 我不确定如何引用这些角色,从我的 jwt 来看,因为该属性的“名称”似乎是“schemas.microsoft.com/ws/2008/06/identity/claims/role”。 @Craig,如果角色总是带有 url 和有效的 json,那么这可能会帮助你 --> const token = 'UserId': '1', 'schemas.xmlsoap.org/ws/2005/05/identity/claims/name': "Unset" , 'schemas.microsoft.com/ws/2008/06/identity/claims/role': [0: "User", 1: "Admin"], 'exp': 1531116565 ;让角色 = [] Object.keys( 令牌 ).forEach( 键 => if( key.match( /.*role$/) ) 角色 = 令牌 [ 键 ] ) 让 isAdmin = false; roles.map(role => let r = Object.values( role ) if ( r[0] == 'Admin' ) isAdmin = true ) console.log( isAdmin );

以上是关于从 Javascript 中的 JWT 中提取“角色”的主要内容,如果未能解决你的问题,请参考以下文章

从 jwt 令牌中提取值

使用 OpenCV C++ 从黑白图像中提取四边形的角(极端角点)

Kong 和 JWT - API 应如何从令牌中提取信息

Spring Boot OAuth2:从 cookie 中提取 JWT 进行身份验证

如何从 JWT access_token (bshaffer oauth library) 中提取 user_id

提取 JWT 时请求未定义