解码JSON网络令牌斯威夫特 [英] Decoding JSON Web Tokens in Swift
问题描述
试图去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 code>方法没有。
因此,这实际上是在服务器端创建一个错误
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屋!