当前位置: 首页 > news >正文

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

最终解码效果如下:

http://www.jsqmd.com/news/299082/

相关文章:

  • 基于深度学习的电动车头盔检测系统
  • keycloak测试11.0.2 for windows
  • 基于深度学习的番茄检测系统
  • 基于深度学习的肺部病变检测系统
  • 得到节点Device (P2P0)的子节点Device (S1F0)的PCI地址
  • 导师严选2026继续教育一键生成论文工具TOP9:学术写作全维度测评
  • 开源DTU全套方案详解:原理图设计、PCB布局、BOM清单、上位机源码及Keil嵌入式源码集成
  • 基于MATLAB的TERCOM算法实现与优化
  • 小红书高清/4K视频下载指南(2026最新实测有效)
  • 电子标签拣货系统:高效、智能的物流分拣解决方案
  • 这群程序员疯了,不给钱的活都干
  • 珲春推荐一下烤肉哪家正宗
  • 珲春推荐烤肉哪家无广
  • MATLAB算法仿真:无人机系统三维地图路径规划 - 多种算法对比(包括BA、CPFIBA和D...
  • 基于Matlab-YALMIP-CPLEX的微网优化调度:‘总费用最低‘的蓄电池与市场购售电功...
  • 贾子战略 - 军事理论体系的深度解构与时代价值洞察
  • 揭秘优质大牌美妆小样供应链,这几点是关键,服务好的大牌美妆小样供应链哪个好精选国内优质品牌榜单
  • Vmware安装Windows11
  • vc++达成控制NRP8S功率计读取功率(附带源码)
  • 2026年国内质量好的布袋除尘器制造厂哪里有卖,通风蝶阀/除尘器布袋/星型卸料器/除尘器骨架,布袋除尘器制造厂怎么选
  • 基于BP神经网络的迭代优化实现(MATLAB)
  • 判断推理错题集
  • MATLAB小波交叉功率谱分析源代码实现
  • 我用 XinServer 解决了多端数据同步问题
  • 导师严选2026 AI论文写作软件TOP8:本科生毕业论文必备测评
  • 2026选卫浴不迷茫!厂家助你打造理想家,市面上卫浴品牌技术实力与市场典范解析
  • 2026年清污机选购指南:口碑品牌深度评测,不锈钢粉碎型格栅/蓖网式回转格栅/转鼓微滤机,清污机生产厂家口碑排行
  • 2026年复合淀粉供应商大盘点,这些淀粉品牌值得信赖,工业淀粉/复合淀粉/生粉/纸箱淀粉/粘合剂,淀粉直销厂家哪家好
  • 2025年盘点:本地砂浆强度检测仪供应商口碑排行,高强回弹仪检定器/云回弹仪/钢筋位置测定仪/数显高强回弹仪检测仪供应厂家口碑排行
  • C++基础 运算符重载