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 ?? [:]
}
网友评论