Json web token (JWT), 是為了在網(wǎng)絡應用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。
現(xiàn)在用在登陸上使用token認證用戶的情況很頻繁,很多時候Token的解析規(guī)則又是使用的JWT的base64的方式,本文提供了swift解析jwt的方式?
extension String {
func jwtDecode()->[String: Any]{
/**分割為數(shù)組*/
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 = 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)
/**轉(zhuǎn)為字典*/
let jsonDict:[String : Any]? = try? JSONSerialization.jsonObject(with:(decodeString?.data(using: String.Encoding.utf8))!,options: JSONSerialization.ReadingOptions.mutableContainers)as![String : Any]
/**返回jwt */
return jsonDict ?? [:]
}
}