swift-jwt解析

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 ?? [:]
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容