我正在开发一个Spring Boot Web应用程序,该应用程序托管在Zuul反向代理服务器后面,并且API网关是nginx。所有应用程序都在同一虚拟机(NginX,Zuul和“我的应用”)上运行 Nginx执行SSL终止,而zull负责请求身份验证和授权。我正在使用OpenID Connect通过Auth0进行用户身份验证。
请求流程
Browser --(A)--> NginX --(B)--> Zuul --(c)--> My Application
A-带有域名的https呼叫,例如:https://example.com
B-本地运行的Zull服务器的http调用,例如:http://127.0.0.1:7070
在nginx服务器中,我给出了一条规则,将所有流量转发到本地运行的Zull服务器
https://example.com-> http://127.0.0.1:7070
使用此配置,回调URL在Auth0处设置为https://example.com/callback,并且一旦调用了回调URL,它将以不同的名称发送到zuul服务器。
https://example.com/callback?code=sf4sf4ds4fdf --> http://127.0.0.1:7070/callback?code=sf4sf4ds4fdf
我使用了Auth0提供的库来交换令牌的授权代码。但是在这一点上,对令牌的请求包含的回调URL为http://127.0.0.1:7070/callback,而不是https://example.com/callback(这是我在Auth0上注册并用于获取授权代码的内容)。因此,系统总是抛出错误。
我可以通过删除nginx服务器并直接将zuul服务器放在前面来使它工作(然后没有url更改)。有什么办法可以使用我现有的配置来完成这项工作。
谢谢
答案 0 :(得分:0)
目前看来,此问题无法解决,因为将令牌交换为授权代码的请求内置在Auth0提供的库中。(mvc-auth-common-1.0.2.jar)< / strong>。回调网址是通过调用 req.getRequestURL()。toString()生成的。
由于请求是由nginx代理发送到zull服务器的,因此请求url始终为https://127.0.0.1:7070
为了获得成功,我不得不使用一些技巧。我使用自定义的http请求包装器包装了请求对象。
const textToFind = $('#test').text();
const exists = Array.prototype.some.call(
$('.title'),
title => $(title).text() === textToFind
);
if (exists) {
console.log('exists');
}
在这里,我返回所需的网址。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='title'>lorem</div>
<div class='title'>ipsum</div>
<div class='title'>lorema</div>
<div class='title'>ipsuma</div>
<div id='test'>lorem</div>
现在,只要调用方法 getRequestURL()方法,我的域名就会被传递。