gpt4 book ai didi

ios - 检查 Auth0 idToken 是否过期

转载 作者:行者123 更新时间:2023-11-28 12:17:23 28 4
gpt4 key购买 nike

我有一个 Swift 应用程序,它实现了 Auth0 的 Web 登录。成功登录后,我会收到一个访问 token idToken,它们都存储在我的本地钥匙串(keychain)中。下次登录时,我首先检查访问 token (存储在钥匙串(keychain)中)是否仍然有效

Auth0
.authentication()
.userInfo(withAccessToken: accessToken)
.start { result in
switch result {
case .success(result: let profile):

print("access token still valid")

成功后无需再次登录。然而,我遇到的问题是,即使我的访问 token 仍然有效,我的 idToken 可能已经过期,这会在我使用此 idToken 请求我的 (GraphQL) 后端时导致错误。那么我该如何解决呢?有没有办法检查我的 idToken 是否已在 Swift 中过期?因为如果没有办法检查,我将不得不要求登录,即使 token 可能没有过期。那没有意义。

最佳答案

idToken 是一个 JSON Web Token (JWT),因此元数据是可读的。要查看它的外观,请将您的 token 粘贴到 jwt.io 中并查看格式。

例如,以这个 JWT 为例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoiMTUwNDc1MzQ0NSIsImFkbWluIjp0cnVlfQ.ggeW2vGcdWKNWmICRfTZ8qcBOQlu38DzaO8t_6aNuHQ

它分为 3 个部分: header 、有效负载和签名。过期时间在有效载荷部分。

我们只需要对其进行 base64 解码即可。

let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvbiBTbm93IiwiZXhwIjoiMTUwNDc1MzQ0NSIsImFkbWluIjp0cnVlfQ.aCiqyVAAmHizPshrcdy8jwgHvBg4Diz2YY2e1INjoPg"

// get the payload part of it
var payload64 = jwt.components(separatedBy: ".")[1]

// need to pad the string with = to make it divisible by 4,
// otherwise Data won't be able to decode it
while payload64.count % 4 != 0 {
payload64 += "="
}

print("base64 encoded payload: \(payload64)")
let payloadData = Data(base64Encoded: payload64,
options:.ignoreUnknownCharacters)!
let payload = String(data: payloadData, encoding: .utf8)!
print(payload)

打印出来:

{"sub":"1234567890","name":"Jon Snow","exp":"1504753445","admin":true}

exp 是您的到期日期。您可以将其传递给 JSON 序列化程序以获取日期:

let json = try! JSONSerialization.jsonObject(with: payloadData, options: []) as! [String:Any]
let exp = json["exp"] as! Int
let expDate = Date(timeIntervalSince1970: TimeInterval(exp))
let isValid = expDate.compare(Date()) == .orderedDescending

关于ios - 检查 Auth0 idToken 是否过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com