加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中解码JWT(JSON Web令牌)令牌?

发布时间:2020-12-14 04:30:00 所属栏目:百科 来源:网络整理
导读:我有这样的JWT令牌 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 我如何解码这个,以便我可以像这样得到有效载荷 { “sub”: “1234567890”,
我有这样的JWT令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

我如何解码这个,以便我可以像这样得到有效载荷

{ “sub”: “1234567890”,“name”: “John Doe”,“admin”: true }

解决方法

如果你对使用图书馆没问题,我会建议这个 https://github.com/auth0/JWTDecode.swift

然后导入库导入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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读