Coinbase Oauth2 授权不弹出对话框
Posted
技术标签:
【中文标题】Coinbase Oauth2 授权不弹出对话框【英文标题】:Coinbase Oauth2 authorization without pop-up dialog 【发布时间】:2020-03-16 15:01:49 【问题描述】:我正在使用 Spring 5 和 Java 8 并创建一个 RESTful 客户端,该客户端将登录 CoinBase 并在给定时间为我进行交易。我知道有一个不受支持的用于 Coinbase 的 Java SDK,我也在研究该代码以寻找线索。
我在我的 Spring 应用程序中使用 CoinBase Oauth2 客户端,到目前为止它非常成功。我使用回调 URL 进行授权调用。这会打开一个对话框,如果我已登录,会要求我使用 MyApp 授权 My Coinbase Acct,我会收到一封电子邮件,表明已完成。如果我还没有登录 Coinbase,那么我会被要求输入我的 Coinbase 用户名/密码,然后它被授权,我再次收到一封电子邮件,这没关系。
我看到的下一步是我的重定向 URL 被调用,并带有一个与它一起传回的代码。众所周知,该代码允许我请求访问令牌。我可以做到,是的,我得到了我的访问令牌。我现在可以使用该访问令牌调用 Coinbase API。但是,此访问令牌仅适用于 7200(秒?),所以两个小时?我希望能够获得一个访问令牌并让它自动登录到我的 coinbase。我不想每次进行交易时都必须重新授权……还是必须这样做?
在我看来,授权返回的“代码”寿命很短,我可以立即使用它来获取该访问令牌。
所以,对我来说,最大的问题是……对于 Coinbase API,我如何才能无限期地保持自己的授权?我希望能够已经获得授权,然后定期获得访问令牌,以便我可以为自己进行交易??????这甚至可以使用 coinbase API 实现吗? 我是否必须使用 Coinbase Pro 来获得我可以使用的能力? Coinbase Pro 甚至可以吗?
我是 Coinbase 的新手,因为它是另一个我了解其中细微差别的第三方 API。在编写 Java 代码以访问第三方 RESTful api 时,我不是新手。 因此,任何帮助将不胜感激。谢谢!
【问题讨论】:
我相信您缺少 refresh_token 可能是通过令牌本身传递给您的。您可以使用它来延长令牌的生命周期。谷歌说有一个:developers.coinbase.com/docs/wallet/coinbase-connect/… 【参考方案1】:我猜您的应用程序中缺少“刷新令牌”。 What is the purpose of a "Refresh Token"?
很难说如何在没有代码 sn-ps 的情况下实现它,但这里有一些步骤应该会有所帮助:
查看有关他们提供的刷新令牌的 coinbase 文章 https://developers.coinbase.com/docs/wallet/coinbase-connect/access-and-refresh-tokens
授权后获取并保存refresh_token和token
创建将使用您的刷新令牌获取新对(令牌、刷新令牌)的函数。您可以在步骤(1)中找到 curl 示例
一个。如果得到 401,将调用 (3) 的 ExceptionHandler(我猜它是 401 - 如果令牌过期)
b.保存第 2 步中的“expires_in”,并在每次请求之前检查它。如果需要,请调用 (3)
【讨论】:
这有帮助。发布我的问题后,我回去阅读了这个文档。是的,Coinbase 说 refresh_token 是非过期的(除非我们将其过期),所以我现在将 refresh_token 存储到我的数据库中以供该特定用户使用。当 cron 作业运行我的后端代码时,它会获取我的 refresh_token,并使用它来获取新的 access_token 和 refresh_token,然后我将 refresh_token 放回数据库中以再次使用。如果 refresh_token 不起作用,则用户必须重新授权并获取新令牌。听起来对吗? 我现在假设您在每个操作上都请求新的 access_token(使用 refresh_token)。这是可行的。但我仍然建议您捕捉未经授权的异常/关注 expires_in 并在旧的 access_token 过期后请求新的 access_token。 顺便说一句,这绝对不是任何要求。只是一件好事。我相信在每个请求上使用刷新令牌(并重新授权)应该存在一些安全漏洞,但我可能错了。以上是关于Coinbase Oauth2 授权不弹出对话框的主要内容,如果未能解决你的问题,请参考以下文章