SwiftyJWT是一个轻量级、纯Swift库,用于以灵活的方式生成JWT。
特性
- 用特定的标题、载荷和算法生成JWT。
- 解码JWT字符串到JWT实体,在必要的检查后。
- 多断言检查。
- 支持多种算法。
- HS,RSA算法密钥管理。
如何集成
pod 'SwiftyJWT'
支持的算法
该库通过以下算法实现JWT验证和签名:
JWS | 算法 | 描述 |
---|---|---|
HS256 | HMAC256 | HMAC使用SHA-256 |
HS384 | HMAC384 | HMAC使用SHA-384 |
HS512 | HMAC512 | HMAC使用SHA-512 |
RS256 | RSA256 | RSASSA-PKCS1-v1_5与SHA-256 |
RS384 | RSA384 | RSASSA-PKCS1-v1_5与SHA-384 |
RS512 | RSA512 | RSASSA-PKCS1-v1_5与SHA-512 |
使用
使用特定的头部、负载和算法生成JWT
HS
let alg = JWTAlgorithm.hs256("secret")
let headerWithKeyId = JWTHeader.init(keyId: "testKeyId")
var payload = JWTPayload()
payload.expiration = 515616187993
payload.issuer = "yufu"
payload.subject = "shuo"
payload.customFields = ["name": EncodableValue(value: "wang"),
"isAdmin": EncodableValue(value: true),
"age": EncodableValue(value: 125),
"height": EncodableValue(value: 121.5)]
let jwtWithKeyId = try? JWT.init(payload: payload, algorithm: alg, header: headerWithKeyId)
RSA
let privateKey = try! RSAKey.init(base64String: "keyString", keyType: .PRIVATE)
let alg = JWTAlgorithm.rs256(privateKey)
let jwtWithKeyId = try? JWT.init(payload: payload, algorithm: alg, header: headerWithKeyId)
将JWT字符串解码为JWT实体
HS
let jwtString = "ey....."
let alg = JWTAlgorithm.hs256("secret")
let jwt = try? JWT.init(algorithm: alg, rawString: jwtString)
RSA
let jwtString = "ey....."
let publicKey = try! RSAKey.init(base64String: "keyString", keyType: .PUBLIC)
let alg = JWTAlgorithm.rs256(publicKey)
let jwt1 = try? JWT.init(algorithm: alg, rawString: jwtString)
JWTPayload声明检查
let payload = JWTPayload()
try payload.checkExpiration()
try payload.checkIssueAt(allowNil: false)
try payload.checkSubject(expected: "shuo")
try payload.checkIssuer(expected: "yufu")
try payload.checkAudience(expected: "here")