JSON Web Token

Build Status

JSON Web Token 的 Swift 实现。

安装

推荐使用 Swift Package Manager 安装 JSONWebToken,同时也支持 CocoaPods

pod 'JSONWebToken'

注意: 可能支持 Carthage,但是我们不提供关于这种安装方式的支持,如果你知道如何使用,请自行承担风险。

用法

import JWT

编码一个声明 (claim)

JWT.encode(claims: ["my": "payload"], algorithm: .hs256("secret".data(using: .utf8)!))

编码一个声明集合 (claim set)

var claims = ClaimSet()
claims.issuer = "fuller.li"
claims.issuedAt = Date()
claims["custom"] = "Hi"

JWT.encode(claims: claims, algorithm: .hs256("secret".data(using: .utf8)!))

使用构建器模式 (builder pattern) 构建 JWT

JWT.encode(.hs256("secret".data(using: .utf8))) { builder in
  builder.issuer = "fuller.li"
  builder.issuedAt = Date()
  builder["custom"] = "Hi"
}

解码 JWT

解码 JWT 时,你必须提供一个或多个算法和密钥。

do {
  let claims: ClaimSet = try JWT.decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.2_8pWJfyPup0YwOXK7g9Dn0cF1E3pdn299t4hSeJy5w", algorithm: .hs256("secret".data(using: .utf8)!))
  print(claims)
} catch {
  print("Failed to decode JWT: \(error)")
}

当 JWT 可能使用多个算法或密钥中的一个进行签名时

try JWT.decode("eyJh...5w", algorithms: [
  .hs256("secret".data(using: .utf8)!),
  .hs256("secret2".data(using: .utf8)!),
  .hs512("secure".data(using: .utf8)!)
])

你可能还需要为 iat、exp 和 nbf 检查提供一些回旋余地,以应对时钟偏差。 你可以通过传递一个 leeway 参数来实现,像这样:

try JWT.decode("eyJh...5w", algorithm: .hs256("secret".data(using: .utf8)!), leeway: 10)

支持的声明 (claims)

该库支持验证以下声明 (claims):

算法

此库支持以下算法

许可

JSONWebToken 使用 BSD 许可证。有关更多信息,请参阅 LICENSE