从 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 中提取“角色”的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenCV C++ 从黑白图像中提取四边形的角(极端角点)
Spring Boot OAuth2:从 cookie 中提取 JWT 进行身份验证