前端获取后端服务生成JWT,利用js方法base64解码payload段:
window.atob("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIsIm5hbWUiOiLmtYvor5V0ZXN0M-a1i-ivlSIsImV4cCI6MTU3OTUxMTY0OH0");
结果报错:
VM273:1 Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
---------------------------------------------------------------------------
原因就是:编码的字符串中含有“-”或者“_”。正确的base64编码的字符串是:
-----------------------------------------------------------------------------
解决办法(此方法也解决了中文乱码问题):
decodeURIComponent(escape(window.atob(("eyJzdWIiOiJ0ZXN0MyIsInVzZXJJZCI6IjEwMTY5MiIsIm5hbWUiOiLmtYvor5V0ZXN0M-a1i-ivlSIsImV4cCI6MTU3OTUxMTY0OH0").replace(/-/g, "+").replace(/_/g, "/"))));
-------------------------------------------------------------------------------
至于为什么,不在后端修改而跑到前端去replace,我也不是很清楚,我只是参考了官网页面解析JWT的相关js代码: