news 2026/5/4 0:34:41

JWT 解码工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JWT 解码工具

JWT 解码工具

  • 页面index.html
  • 脚本
  • 运行效果如下:

页面index.html

<!DOCTYPE html><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Keycloak JWT 解码工具</title><scriptsrc="https://cdn.tailwindcss.com"></script><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/8.0.20/jsrsasign-all-min.js"></script></head><bodyclass="bg-gradient-to-br from-blue-50 to-indigo-100 min-h-screen"><divclass="container mx-auto px-4 py-8 max-w-4xl"><headerclass="text-center mb-12"><h1class="text-4xl font-bold text-gray-800 mb-2">Keycloak JWT 解码工具</h1><pclass="text-gray-600">解码和验证 Keycloak 生成的 JWT 令牌</p></header><main><divclass="bg-white rounded-xl shadow-lg p-6 mb-8"><divclass="mb-6"><labelfor="jwt-token"class="block text-sm font-medium text-gray-700 mb-2"><iclass="fas fa-key mr-2"></i>JWT 令牌</label><textareaid="jwt-token"rows="4"class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition"placeholder="请输入完整的 JWT 令牌..."></textarea></div><divclass="flex flex-wrap gap-4 mb-6"><buttononclick="decodeJWT()"class="flex-1 bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-lg transition transform hover:scale-105"><iclass="fas fa-unlock-alt mr-2"></i>解码令牌</button><buttononclick="clearFields()"class="flex-1 bg-gray-500 hover:bg-gray-600 text-white font-semibold py-3 px-6 rounded-lg transition"><iclass="fas fa-trash-alt mr-2"></i>清空</button></div></div><divid="result-section"class="hidden"><divclass="grid grid-cols-1 md:grid-cols-2 gap-6 mb-8"><divclass="bg-white rounded-xl shadow-lg p-6"><h2class="text-xl font-bold text-gray-800 mb-4 flex items-center"><iclass="fas fa-id-card mr-2 text-blue-600"></i>头部信息(Header)</h2><preid="header-output"class="bg-gray-50 p-4 rounded-lg overflow-x-auto text-sm"></pre></div><divclass="bg-white rounded-xl shadow-lg p-6"><h2class="text-xl font-bold text-gray-800 mb-4 flex items-center"><iclass="fas fa-user-circle mr-2 text-green-600"></i>负载信息(Payload)</h2><preid="payload-output"class="bg-gray-50 p-4 rounded-lg overflow-x-auto text-sm"></pre></div></div><divclass="bg-white rounded-xl shadow-lg p-6 mb-8"><h2class="text-xl font-bold text-gray-800 mb-4 flex items-center"><iclass="fas fa-shield-alt mr-2 text-purple-600"></i>令牌信息</h2><divclass="grid grid-cols-1 md:grid-cols-3 gap-4"><divclass="bg-blue-50 p-4 rounded-lg"><pclass="text-sm text-gray-600">颁发者(iss)</p><pid="issuer"class="font-semibold text-gray-800 truncate"></p></div><divclass="bg-green-50 p-4 rounded-lg"><pclass="text-sm text-gray-600">受众(aud)</p><pid="audience"class="font-semibold text-gray-800 truncate"></p></div><divclass="bg-yellow-50 p-4 rounded-lg"><pclass="text-sm text-gray-600">过期时间(exp)</p><pid="expires-at"class="font-semibold text-gray-800"></p></div></div></div><divclass="bg-white rounded-xl shadow-lg p-6"><h2class="text-xl font-bold text-gray-800 mb-4 flex items-center"><iclass="fas fa-check-circle mr-2 text-red-600"></i>验证状态</h2><divid="validation-result"class="p-4 rounded-lg"><pclass="text-center text-gray-600">请先解码令牌以查看验证结果</p></div></div></div></main><footerclass="mt-12 text-center text-gray-600 text-sm"><p>©2026Keycloak JWT 解码工具 - 专为 Keycloak 令牌调试而设计</p></footer></div><scriptsrc="script.js"></script></body></html>

脚本

/** * JWT 解码工具 JavaScript 实现 */// 解码 JWT 令牌functiondecodeJWT(){constjwtToken=document.getElementById('jwt-token').value.trim();if(!jwtToken){alert('请输入有效的 JWT 令牌');return;}try{// 分割 JWT 令牌constparts=jwtToken.split('.');if(parts.length!==3){thrownewError('无效的 JWT 令牌格式');}// 解码头部和负载constheader=JSON.parse(atob(parts[0]));constpayload=JSON.parse(atob(parts[1].replace(/-/g,'+').replace(/_/g,'/')));// 显示解码结果displayDecodedJWT(header,payload);// 验证令牌validateToken(payload);// 显示结果区域document.getElementById('result-section').classList.remove('hidden');}catch(error){alert(`解码失败:${error.message}`);}}// 显示解码后的 JWT 信息functiondisplayDecodedJWT(header,payload){// 显示头部信息document.getElementById('header-output').textContent=JSON.stringify(header,null,2);// 显示负载信息document.getElementById('payload-output').textContent=JSON.stringify(payload,null,2);// 显示令牌信息document.getElementById('issuer').textContent=payload.iss||'N/A';document.getElementById('audience').textContent=Array.isArray(payload.aud)?payload.aud.join(', '):(payload.aud||'N/A');// 格式化过期时间if(payload.exp){constexpDate=newDate(payload.exp*1000);document.getElementById('expires-at').textContent=expDate.toLocaleString('zh-CN');}else{document.getElementById('expires-at').textContent='N/A';}}// 验证令牌functionvalidateToken(payload){constnow=Math.floor(Date.now()/1000);constresultElement=document.getElementById('validation-result');// 检查是否过期if(payload.exp&&payload.exp<now){resultElement.innerHTML=`<div class="text-center"> <i class="fas fa-times-circle text-red-500 text-3xl mb-2"></i> <p class="font-semibold text-red-600">令牌已过期</p> <p class="text-sm text-gray-600 mt-1">过期时间:${newDate(payload.exp*1000).toLocaleString('zh-CN')}</p> </div>`;resultElement.className='bg-red-50 border-l-4 border-red-500 p-4 rounded-lg';return;}// 检查是否生效if(payload.nbf&&payload.nbf>now){resultElement.innerHTML=`<div class="text-center"> <i class="fas fa-clock text-yellow-500 text-3xl mb-2"></i> <p class="font-semibold text-yellow-600">令牌尚未生效</p> <p class="text-sm text-gray-600 mt-1">生效时间:${newDate(payload.nbf*1000).toLocaleString('zh-CN')}</p> </div>`;resultElement.className='bg-yellow-50 border-l-4 border-yellow-500 p-4 rounded-lg';return;}// 令牌有效resultElement.innerHTML=`<div class="text-center"> <i class="fas fa-check-circle text-green-500 text-3xl mb-2"></i> <p class="font-semibold text-green-600">令牌有效</p> <p class="text-sm text-gray-600 mt-1">${payload.exp?`将在${Math.floor((payload.exp-now)/60)}分钟后过期`:'无过期时间'}</p> </div>`;resultElement.className='bg-green-50 border-l-4 border-green-500 p-4 rounded-lg';}// 清空输入和结果functionclearFields(){document.getElementById('jwt-token').value='';document.getElementById('result-section').classList.add('hidden');document.getElementById('validation-result').innerHTML='<p class="text-center text-gray-600">请先解码令牌以查看验证结果</p>';document.getElementById('validation-result').className='';}

运行效果如下:

运行效果如下:

测试TOKEN
token如下:

eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJNVWNPLWJ1QVY4SWxrWUJNSUlwM3pldUIxYU9iUl94Nm9FZ256NmwyYlowIn0.eyJleHAiOjE3NjkzMDUxMDEsImlhdCI6MTc2OTMwNDgwMCwianRpIjoiNDVhNjBhYjQtOTU1OS00Yjg4LWEzMTAtNDZmODM2YWJiN2Y0IiwiaXNzIjoiaHR0cDovL2tleWNsb2FrLmRlbW9mb3IuY29tLmNuL2F1dGgvcmVhbG1zL2tleWNsb2FrLWxlYXJuIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImEwODhlMjcyLThhNGUtNGI2Yi1hMjI0LWM3NjlhODYzNjRjYyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImNoYXB0ZXItMSIsInNlc3Npb25fc3RhdGUiOiJlMDI5YzhkMy03YzA2LTRhMjItOGQyMC1jMjZmY2E2ZjU0MTEiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX0sImNoYXB0ZXItMSI6eyJyb2xlcyI6WyJ1c2VyIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoidXNlciJ9.XTN-kpc2nGjv6u91M6ONXpk8Nn1VYltaN5MhNOGZn-tXJd4DoCo-ZdpteHGznFF3Vfl3ivMMPeLVZl-Jd6kZNDK4q5WuM1sqCO8F3HM8MRS5iGOQdRhMR2rAb4FWYsonl4mE7w1Znbvr5OsLUoxec3AUEXChnp_2c36xlAPsDwXPdVqR_5SX3CKPqFLI7Ixy90RiMpc8S72wc2ves6XkIX9lLtzOjtKmRsVAv4RKmkkTT-h9_ifMTZNp9jVhf33LjgEjn17JiTVKVEiJj8Xr_48_2ClRrxf7jZ4dfwBmldiZqyzOst9Ww_DLxZHNcJxIFIOFxMIIW3bU0nXiOGZXQg

最终解码效果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 14:45:56

keycloak测试11.0.2 for windows

keycloak测试11.0.2PasswordClient credentialsIntrospectionAuthorization codePassword 应用于后端处理: set KEYCLOAK_HOSThttp://keycloak.demofor.com.cn/ set KEYCLOAK_REALMkeycloak-learn set CLIENT_IDchapter-1 set CLIENT_SECRET149240f3-31c6-46dc-bab4-0b53c0ee1…

作者头像 李华
网站建设 2026/5/1 11:11:56

电气设计的隐藏外挂:1:1元器件图库实战

电气高低压成套元器件 几乎每个厂家的元器件都画出来了尺寸大小电气高低压成套元器件 几乎每个厂家的元器件都画出来了尺寸大小型号都有&#xff0c;应有尽有&#xff0c;全部1:1尺寸&#xff0c;直接标注就OK配电柜设计现场最要命的场景&#xff1a;左手抓着某厂家的断路器样本…

作者头像 李华
网站建设 2026/5/2 5:12:33

珲春推荐烤肉哪家无广

珲春无广烤肉推荐&#xff1a;延炭乳酸菌烤肉 在珲春这座美食之城&#xff0c;烤肉是当地极具特色的美食之一。若想寻找一家无广且高品质的烤肉店&#xff0c;延炭乳酸菌烤肉是不可错过的选择。 主打健康概念 延炭乳酸菌烤肉以其独特的健康理念脱颖而出。店内用乳酸菌腌制肉类…

作者头像 李华
网站建设 2026/5/3 11:05:01

基于BP神经网络的迭代优化实现(MATLAB)

一、MATLAB实现代码 1. 网络结构定义 %% 网络参数设置 input_neurons 2; % 输入层神经元数 hidden_neurons 3; % 隐藏层神经元数 output_neurons 1; % 输出层神经元数 learning_rate 0.1; % 学习率 epochs 10000; % 迭代次数%% 权重初始化&#xff08;He初始化…

作者头像 李华
网站建设 2026/5/1 14:58:43

Java分布式系统开发与实践!

我们都知道&#xff0c;目前大型网站跟企业级应用目前的要求都是达到“互联网三高”&#xff0c;这时传统的集中式系统肯定是无法满足基本的需求的&#xff0c;越来越多的企业的系统架构目前都是向着分布式系统的方向演进。分布式系统的特征分布式系统相对于传统的集中式系统来…

作者头像 李华
网站建设 2026/5/2 6:04:01

灵活就业简历制作难?项目导向模板下载,HR一眼认可

不同求职场景&#xff0c;简历误区各不相同&#xff1f;校招应届生分不清实习和校招简历重点&#xff0c;要么堆砌校园经历&#xff0c;要么遗漏实习成果&#xff1b;跨行业转行想突破壁垒&#xff0c;却不会衔接过往经历、突出可迁移技能&#xff1b;职场深耕3-5年&#xff0c…

作者头像 李华