我正在尝试使用 Java 构建应用程序。该应用程序将访问数据库的处理程序,该处理程序动态运行查询并返回结果。正在使用 OAuth。该应用程序从我服务器上的一个端口运行,处理程序和数据库在另一个端口上。根据我对 OAuth 的基本理解,这是我认为这一切如何运作的图片:
如果我对 OAuth 的理解不足,请告诉我。
起初,当我尝试运行该应用程序时,我收到了带有 HTTP 500 代码的 OAuth 错误。我认为这是因为它使用的 OAuth 密钥不在服务器上批准的 OAuth 密钥列表中,所以我进入我的代码并逐步调试,直到我能够获取密钥和秘密并添加它们到那个列表。之后,我不再收到 OAuth 错误,但现在当我运行应用程序时,我得到一个 302 标头返回,其位置设置为:
server:port2/.../oauth-authorize?oauth_callback=[handler URL]?request_token_secret=[gibberish]&oauth_token=[gibberish]
request_token_secret 和 oauth_token 与我添加到列表中的不同。
不幸的是,它实际上并没有遵循 302 重定向。我不确定为什么会发生这种情况,但我很有信心这与我的应用程序在两个不同的端口上运行有关,因此遇到了 XSS 问题。我不确定为什么会发生这种情况,也不知道如何解决它,因为我不能使用 CORS,而且它们必须是两个不同的端口。
编辑:我尝试做同样的事情,但完全使用不同的服务器而不是具有两个不同端口的同一服务器。我得到了完全相同的错误,除了重定向位置中的令牌和秘密不同。所以这绝对是一个跨站点脚本的事情。
- 我对 OAuth 工作原理(如图所示)的理解是否正确?
- 这里到底发生了什么?
- 是什么导致了这个问题,我该如何解决?