解码JSON网络令牌斯威夫特 [英] Decoding JSON Web Tokens in Swift

查看:152
本文介绍了解码JSON网络令牌斯威夫特的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图去code斯威夫特一个JWT有效载荷和具有真正困难的时候

 静态FUNC德codePayload(tokenstr:字符串){    //分裂智威汤逊中提取的有效载荷
    让ARR =拆分(tokenstr){$ 0 ==}    // EN的base64 codeD字符串我想脱code
    让base64String =改编[1]为String
    的println(base64String)// eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0    //试图base64转换字符串的NSData
    让NSData的:NSData的NSData的=(base64En codedString:base64String,选择:NSDataBase64DecodingOptions(rawValue:0))    因为NSData的解开作为无//解码失败
    让base64De codeD:的NSString =的NSString(数据:NSData的!编码:NSUTF8StringEncoding)!
}


解决方案

  eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0

不是有效的Base64连接codeD字符串,因为它的长度
是不是4的倍数的Base64一些德codeR容忍这种错误,但
的NSData 方法没有。

因此​​,这实际上是在服务器端创建一个错误
Base64编码的连接codeD字符串。如果有必要,你可以在你的应用程序修复
 通过 = 字符添加所需的填充(code更新斯威夫特2):

  VAR base64String =改编[1]为String
如果base64String.characters.count%4!= 0 {
    让padlen = 4 - base64String.characters.count 4%
    base64String + =字符串(计数:padlen,repeatedValue:字符(=))
}

而现在的解码按预期工作:

 如果让数据=的NSData(base64En codedString:base64String,选项:[]),
    让海峡=字符串(数据:数据,编码:NSUTF8StringEncoding){
    打印(STR)// {EXP:1426822163,ID:550b07738895600e99000001}
}

trying to decode a JWT payload in Swift and having a really difficult time

static func decodePayload(tokenstr: String) {

    //splitting JWT to extract payload
    let arr = split(tokenstr) {$0 == "."}

    //base64 encoded string i want to decode
    let base64String = arr[1] as String
    println(base64String) //eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0

    //attempting to convert base64 string to nsdata 
    let nsdata: NSData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

    //decoding fails because nsdata unwraps as nil
    let base64Decoded: NSString = NSString(data: nsdata!, encoding: NSUTF8StringEncoding)!


}

解决方案

eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0

is not a valid Base64 encoded string because its length is not a multiple of 4. Some Base64 decoder tolerate this error, but the NSData methods don't.

So this is actually an error on the server side creating the Base64 encoded string. If necessary, you can fix it in your app by adding the required padding with = characters (code updated for Swift 2):

var base64String = arr[1] as String
if base64String.characters.count % 4 != 0 {
    let padlen = 4 - base64String.characters.count % 4
    base64String += String(count: padlen, repeatedValue: Character("="))
}

And now the decoding works as expected:

if let data = NSData(base64EncodedString: base64String, options: []),
    let str = String(data: data, encoding: NSUTF8StringEncoding) {
    print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"}
}

这篇关于解码JSON网络令牌斯威夫特的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆