Search code examples
jsonswiftswift3jwt

How can I decode JWT (JSON web token) token in Swift?


I have a JWT token like this

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

How can I decode this so that I can get the payload like this

{ "sub": "1234567890", "name": "John Doe", "admin": true }


Solution

  • I have got the solution for this.

     static func getJwtBodyString(tokenstr: String) -> NSString {
    
        var segments = tokenstr.components(separatedBy: ".")
        var base64String = segments[1]
        print("\(base64String)")
        let requiredLength = Int(4 * ceil(Float(base64String.characters.count) / 4.0))
        let nbrPaddings = requiredLength - base64String.characters.count
        if nbrPaddings > 0 {
            let padding = String().padding(toLength: nbrPaddings, withPad: "=", startingAt: 0)
            base64String = base64String.appending(padding)
        }
        base64String = base64String.replacingOccurrences(of: "-", with: "+")
        base64String = base64String.replacingOccurrences(of: "_", with: "/")
        let decodedData = Data(base64Encoded: base64String, options: Data.Base64DecodingOptions(rawValue: UInt(0)))
      //  var decodedString : String = String(decodedData : nsdata as Data, encoding: String.Encoding.utf8)
    
        let base64Decoded: String = String(data: decodedData! as Data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
        print("\(base64Decoded)")
        return base64String as NSString
    }
    

    This works for me great. Thank you.