我有这样的JWT令牌 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 我如何解码这个,以便我可以像这样得到有效载荷
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
我如何解码这个,以便我可以像这样得到有效载荷
如果你对使用图书馆没问题,我会建议这个 https://github.com/auth0/JWTDecode.swift{ “sub”: “1234567890”, “name”: “John Doe”, “admin”: true }
然后导入库导入JWTDecode并执行.
let jwt = try decode(jwt: token)
由于您不想包含此库,因此我提供了所需的部件以使其工作.
func decode(jwtToken jwt: String) -> [String: Any] { let segments = jwt.components(separatedBy: ".") return decodeJWTPart(segments[1]) ?? [:] } func base64UrlDecode(_ value: String) -> Data? { var base64 = value .replacingOccurrences(of: "-", with: "+") .replacingOccurrences(of: "_", with: "/") let length = Double(base64.lengthOfBytes(using: String.Encoding.utf8)) let requiredLength = 4 * ceil(length / 4.0) let paddingLength = requiredLength - length if paddingLength > 0 { let padding = "".padding(toLength: Int(paddingLength), withPad: "=", startingAt: 0) base64 = base64 + padding } return Data(base64Encoded: base64, options: .ignoreUnknownCharacters) } func decodeJWTPart(_ value: String) -> [String: Any]? { guard let bodyData = base64UrlDecode(value), let json = try? JSONSerialization.jsonObject(with: bodyData, options: []), let payload = json as? [String: Any] else { return nil } return payload }
像这样称呼它:
decode(jwtToken: TOKEN)