我在一个iOS应用程序中集成了coinbase,我正在使用Oauth2进行身份验证。我可以在完成通常的工作流程后获得访问令牌。我还注意尝试刷新我的访问令牌,只要有任何请求到达401(到期时),请调用:
POST https://coinbase.com/oauth/token 数据:
grant_type = refresh_token& refresh_token = abcd1234& client_id = theclientid& client_secret = somesecretid
它可以工作一段时间但不时会因请求响应而失败:
NSHTTPURLResponse: 0x15eb2730
{ URL: https://coinbase.com/oauth/token } { status code: 401, headers {
"CF-RAY" = "f67d477aae4052e-YYZ";
"Cache-Control" = "no-store";
Connection = "keep-alive";
"Content-Type" = "application/json; charset=utf-8";
Date = "Sun, 02 Feb 2014 15:14:14 GMT";
Pragma = "no-cache";
Server = "cloudflare-nginx";
"Set-Cookie" = "__cfduid=<some long alpha-numeric string>; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.coinbase.com; HttpOnly";
Status = "401 Unauthorized";
"Strict-Transport-Security" = "max-age=31536000";
"Transfer-Encoding" = Identity;
Vary = "Accept-Encoding";
"Www-Authenticate" = "Bearer realm=\"Doorkeeper\", error=\"invalid_request\", error_description=\"The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.\"";
"X-Content-Type-Options" = nosniff;
"X-Frame-Options" = SAMEORIGIN;
"X-Rack-Cache" = "invalidate, pass";
"X-Request-Id" = "<some long alpha-numeric string>";
"X-Runtime" = "0.012066";
"X-Ua-Compatible" = "IE=Edge,chrome=1";
} }
之前有没有人遇到此错误?我假设请求URL始终是正确的。我不确定为什么会抱怨“缺少必需参数”或“不支持的参数”。我还没有想出一种失败的模式。希望那里的人可能以前见过这个。
答案 0 :(得分:0)
我无法直接找到有关refresh_token请求的任何文档,但我认为您还应该在refresh_token请求中包含redirect_uri(基于此:https://coinbase.com/docs/api/authentication#collapse2)。
此外,我注意到我的官方coinbase应用程序需要在几天前重新验证,但是当我登录到我的coinbase帐户时,它表示应用程序已在25天前获得授权。那么,甚至request_tokens也有超时?一段时间没有使用应用程序后,您的request_token请求是否失败?
或者也许coinbase重置某些内容并使其所有access_tokens和refresh_tokens无效,因为我的应用程序(以前在refresh_tokens中工作正常)现在在refresh_token请求上失败了。
所以,我建议你的应用程序在发生这种情况时重新授权,并获得一个新的access_token和refresh_token,因为我认为这是官方的coinbase应用程序所做的。