细节小处iOS

swift-jwt解析

2017-11-14  本文已影响161人  半日浮生_iOSer

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

现在用在登陆上使用token认证用户的情况很频繁,很多时候Token的解析规则又是使用的JWT的base64的方式,本文提供了swift解析jwt的方式 

extension String {
    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 = 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 ?? [:]
    }
}
上一篇下一篇

猜你喜欢

热点阅读