coinbase oauth 授权 returns html,如何与我的网络应用程序集成

coinbase oauth authorization returns html, how to integrate with my web-app

因此,我正在创建一个与 coinbase 一起使用的网络应用程序。前端是一个标准的静态页面,带有 html 和 jquery,这是非常普通的。后端是一个单独的网络应用程序,由 Spring 5 制作,并有一堆 RESTful 网络服务。

我转到 login.html 并登录。这意味着我将 username/password 发送回我的登录 Spring 控制器,然后我将访问令牌发送回 UI。我把它放在一个 cookie 中,然后我重新加载一个新页面,该页面上有一个大胖授权按钮。

该按钮对我的 Spring RESTful 控制器执行 AJAX 调用,传递令牌,因为我想让该端点安全,效果很好。

在后端(或中间件),我正在 RESTful 调用 Coinbase 以启动 Oauth2 身份验证过程。我从属性文件中读取了我的客户端 ID,我传入了 redirectURI 和一个状态。这一切都很好,它进入了 coinbase,响应是 HTML。我将其传递回我的客户端,即前端,并且我有这个 HTML 这是 coinbase 授权页面。

这就是它变得冒险的地方......我是后端人员,所以我可以毫无问题地在后端进行 RESTful 调用。我得到 HTML,这应该是允许用户让我的网络应用程序与他们的 coinbase 帐户一起使用的授权页面。我得到 HTML,现在我不知道在我的页面或新页面上显示此 html 的正确方法。这是我javascript和jquery知识的不足。

我的 authorize.js 中的 AJAX 代码如下所示:

$.ajax({
        url : 'http://localhost:8080/myapp-be/api/coinbase/authorization',
        headers : {'mytoken' : mytoken},
        dataType: 'html',
        cache: false,
           success: function(response) {
               $("html").html(response);
           }
    });

这是正确的方法吗?

我绝对可以把coinbase调用放在我的浏览器里,它很容易弹出Coinbase授权对话框。如果我授权,输入我的 username/password,我将被发送到我作为回调重定向 uri 传入的回调页面。

但是,据我了解,我们不想向任何人公开客户 ID。这就是为什么我的后端会这样做,而我们只是 return HTML。所以,我在这里被搁置了。 使用我当前的代码,我遇到了很多 Javascript 错误,而且我只知道这不是正确的方法。我遇到了很多 CORS 问题,当我尝试授权时,我收到一个错误,提示无法访问正确的页面。

如何正确调用 Coinbase 授权 API。他们的文档页面: https://developers.coinbase.com/docs/wallet/coinbase-connect/integrating 第 1 步显示:

GET 
https://www.coinbase.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URL&state=SECURE_RANDOM&scope=wallet:accounts:read

所以,遗憾的是,我对解决这个问题的最佳方法有点困惑。 如果可以的话,我可以从客户端发出这个 GET 调用来暴露客户端 ID 吗? 或者,我可以想出正确的方法来显示 HTML 返回 Coinbase 授权页面?

感谢您的帮助!

所以,我已经有很长时间没有做任何 UI 的工作了。我从来不必担心与前端相关的交叉脚本或 iframe 问题或安全问题 (UI)。

根据我收集到的信息,将 HTML 从第三方网站拉到 div 或拉到我网站上的 iframe 并不是最好的计划。我可以告诉你,即使我确实将 HTML 拉到我网站的网页中,仍然存在大量 javascript 错误和 CORS 问题。

最终,我对中间件的 ajax 调用被更改为仅撤回 coinbase 授权 URL。一个简单的 windows 重定向,我就在 coinbase 网站上,这是应该的。完成授权后,我将被重定向回我告诉 Coinbase 做的重定向 link。

因此,获取 link 并进行简单的重定向就成功了。从第三方站点加载 HTML 到我的网页没有。经验教训!

谢谢!希望这可以帮助其他人。