美文网首页
JWT token android和iOS分别获取Payload

JWT token android和iOS分别获取Payload

作者: 稀客花千树 | 来源:发表于2019-09-26 11:29 被阅读0次

JWT在Android中的使用“JWT签名与本地计算的签名不匹配.JWT 有效性不能被断言,也不应该被信任”问题。
JWT介绍:http://www.manongjc.com/detail/10-jfpsyicugnzdwvj.html
JWT主页:https://jwt.io/
获取Payload中传递的数据,直接上代码记录一下
android:

    TokenBean tokenBean = new Gson().fromJson(base64Decode(spUtil.getStringValue("token").split("\\.")[1],""),TokenBean.class);
    private String base64Decode(String content, String charsetName) {
        if (TextUtils.isEmpty(charsetName)) {
            charsetName = "UTF-8";
        }
        byte[] contentByte = Base64.decode(content, Base64.DEFAULT);
        try {
            return new String(contentByte, charsetName);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "";
    }

ios:

let tokenData = JSONDeserializer<TokenInfoModel>.deserializeFrom(json: JSON(UserManager.defaultManager.token.jwtDecode() as Any).description)
func jwtDecode() -> [String: Any] {
        /**分割为数组*/
        let segments = components(separatedBy: ".")
        /**获取第二个元素Payload负载元素(有意义的key就在里面解析的)*/
        var base64String = segments[1]
        /** base64解码*/
        let requiredLength = (4 * ceil((Float)(base64String.count)/4.0))
        let nbrPaddings = Int(requiredLength) - base64String.count
        if nbrPaddings > 0 {
            let pading = "".padding(toLength: nbrPaddings,withPad: "=",startingAt: 0)
            base64String += pading
        }
        base64String = base64String.replacingOccurrences(of: "-",with: "+")
        base64String = base64String.replacingOccurrences(of: "_",with: "/")
        let decodeData = Data(base64Encoded: base64String,options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
        let decodeString = String.init(data: decodeData!,encoding: String.Encoding.utf8)
        /**转为字典*/
        let jsonDict: [String: Any]? = try? JSONSerialization.jsonObject(with: (decodeString?.data(using: String.Encoding.utf8))!,options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any]
        /**返回jwt */
        return jsonDict ?? [:]
    }

相关文章

网友评论

      本文标题:JWT token android和iOS分别获取Payload

      本文链接:https://www.haomeiwen.com/subject/xpcoectx.html