Swift 3 Oauth2 Imgur 刷新键 - 错误 400 "Invalid grant_type parameter or parameter missing"

标签 swift api oauth nsmutableurlrequest imgur


我在使用 Swift/NSMutableURLRequest 调用 Imgur API 的 /oauth2/token 端点时遇到问题,也许这实际上只是我以错误的方式设置了请求,因为我对 NSMutableURLRequest 没有太多经验。
场景:
用户已经验证了我的应用程序,他可以将照片发布到他的 Imgur 帐户。

问题:
Imgur要求28天后重新认证。
这就是为什么在对应用程序进行身份验证后,您会得到一个(临时的;28 天)access_token 和一个长期的 refresh_token,您可以在 28 天后使用它来获得一个新的 访问 token
我按照 API 调用来检索新的 access_token 但总是收到错误:
“无效的 grant_type 参数或缺少参数”,错误代码为 400
这是我的 HTTP 请求:

if let reqUrl = URL(string: "https://api.imgur.com/oauth2/token?refresh_token=\(refreshKey)&client_id=\(CLIENT_ID)&client_secret=\(IMGUR_SECRET)&grant_type=refresh_token")
    {
        let request = NSMutableURLRequest(url: reqUrl)
        print("request: \(reqUrl)")
        request.httpMethod = "POST"
        request.setValue("Client-ID \(CLIENT_ID)", forHTTPHeaderField: "Authorization")
        request.addValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")

        let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in
            if (error != nil){
                print("error: \(error)")
                return
            }
            print("response: \(response!)")
            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("response string: \(responseString!)")
        }
        task.resume()
    }

refreshKeyCLIENT_IDIMGUR_SECRET 应该都是正确的。

预先感谢您的帮助!

最佳答案

所以,我是这样解决的:

let bodyString = "grant_type=refresh_token&client_secret=\(IMGUR_SECRET)&client_id=\(CLIENT_ID)&refresh_token=\(refreshKey)"

request.httpBody = bodyString.data(using: .utf8)

基本上是在请求的正文中设置参数,而不是将它们放在 URL 中。 希望这也可以帮助其他人:)

关于Swift 3 Oauth2 Imgur 刷新键 - 错误 400 "Invalid grant_type parameter or parameter missing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42954997/

相关文章:

swift/SpriteKit : Animate multiple buttons with small delay between each

ios - Realm 结果<T> 计数返回 nil

php - 加速 php api 调用

java - 如何使用 facebook api 登录我的 Android 应用程序?

javascript - 使用 Meteor.loginWithFacebook 时出现内部服务器错误

ios - 单击 Collection View 单元格时振动 iPhone 无法正常工作 Swift

swift - 如何在 Watch Interface Builder 中表示页面点/面包屑/页面指示器?

javascript - Linkedin Oauth Javascript 授权 "uh oh!"

javascript - json.stringify 不是 JavaScript 的函数错误

django - Google OAUTH 给出 502 错误