我正在尝试实现 API 服务的使用,该服务需要对其所有 API 调用进行 JWT 身份验证。
我了解 JWT 令牌是什么以及它们的使用方式,我的问题是我正在编写一个 Swift 应用程序,但无法完全弄清楚生成令牌的过程,以便我可以将其附加为Bearer
在我的 API 调用中。
- 我可以在客户端(swift 应用程序)生成 JWT 令牌吗?
- 创建一个 Google Cloud Function 来生成令牌然后写回 Firebase
在我的 API 调用中使用?
以下是如何使用 Apple 的 CryptoKit 在 Swift 中制作 JSON Web 令牌。它使用默认示例https://jwt.io https://jwt.io
import CryptoKit
extension Data {
func urlSafeBase64EncodedString() -> String {
return base64EncodedString()
.replacingOccurrences(of: "+", with: "-")
.replacingOccurrences(of: "/", with: "_")
.replacingOccurrences(of: "=", with: "")
}
}
struct Header: Encodable {
let alg = "HS256"
let typ = "JWT"
}
struct Payload: Encodable {
let sub = "1234567890"
let name = "John Doe"
let iat = 1516239022
}
let secret = "your-256-bit-secret"
let privateKey = SymmetricKey(data: Data(secret.utf8))
let headerJSONData = try! JSONEncoder().encode(Header())
let headerBase64String = headerJSONData.urlSafeBase64EncodedString()
let payloadJSONData = try! JSONEncoder().encode(Payload())
let payloadBase64String = payloadJSONData.urlSafeBase64EncodedString()
let toSign = Data((headerBase64String + "." + payloadBase64String).utf8)
let signature = HMAC<SHA256>.authenticationCode(for: toSign, using: privateKey)
let signatureBase64String = Data(signature).urlSafeBase64EncodedString()
let token = [headerBase64String, payloadBase64String, signatureBase64String].joined(separator: ".")
print(token) // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)