我在iOS应用程序中使用的API只允许用户拥有一小时的OAuth访问令牌。我如何每小时获得一个新的访问令牌?我会设置TimeInterval
或如何检查访问令牌是否已过期?
以下是我使用Alamofire
检索访问令牌的方法。而且我不需要刷新令牌,因为移动应用程序无法获取它们。
guard let url = URL(string: "https://www.reddit.com/api/v1/access_token") else { return }
let uuid = UUID().uuidString
let params: Parameters = [
"grant_type" : "https://oauth.reddit.com/grants/installed_client",
"device_id" : "\(uuid)"]
let username = "MY_CLIENT_ID"
let password = ""
let loginString = String(format: "%@:%@", username, password)
let loginData = loginString.data(using: String.Encoding.utf8)! as NSData
let base64EncodedString = loginData.base64EncodedString()
let headers = ["Content-Type" : "application/x-www-form-urlencoded",
"Authorization" : "Basic \(base64EncodedString)"]
Alamofire.request(url, method: .post , parameters: params, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response) in
UserDefaults.standard.set(uuid, forKey: "userID")
UserDefaults.standard.synchronize()
if let JSON = response.result.value as? [String:Any] {
guard let accessToken = JSON["access_token"] as? String else { return }
KeychainWrapper.standard.set(accessToken, forKey: "oauthToken")
}
答案 0 :(得分:0)
最简单的方法是在执行api调用时检查令牌是否有效,如果它即将到期则再次验证它。您可以使用JWTDecode库解码令牌。 - > JWTDecode
您可以调试打印您的令牌并尝试查看您使用此网站获取的信息https://jwt.io