JSON Web Token 的 Swift 实现。
推荐使用 Swift Package Manager 安装 JSONWebToken,同时也支持 CocoaPods。
pod 'JSONWebToken'
注意: 可能支持 Carthage,但是我们不提供关于这种安装方式的支持,如果你知道如何使用,请自行承担风险。
import JWT
JWT.encode(claims: ["my": "payload"], algorithm: .hs256("secret".data(using: .utf8)!))
var claims = ClaimSet()
claims.issuer = "fuller.li"
claims.issuedAt = Date()
claims["custom"] = "Hi"
JWT.encode(claims: claims, algorithm: .hs256("secret".data(using: .utf8)!))
JWT.encode(.hs256("secret".data(using: .utf8))) { builder in
builder.issuer = "fuller.li"
builder.issuedAt = Date()
builder["custom"] = "Hi"
}
解码 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):
iss
) 声明 (Claim)exp
) 声明 (Claim)nbf
) 声明 (Claim)iat
) 声明 (Claim)aud
) 声明 (Claim)此库支持以下算法
none
- 不安全的 JWThs256
- 使用 SHA-256 哈希算法的 HMAC(默认)hs384
- 使用 SHA-384 哈希算法的 HMAChs512
- 使用 SHA-512 哈希算法的 HMACJSONWebToken 使用 BSD 许可证。有关更多信息,请参阅 LICENSE。