Auth0 /authorize 导致"No 'Access-Control-Allow-Origin' header"如果由 servlet 调用,则通过 JS fetch 依次调用



I use Auth0 API.整个应用程序位于单个Tomcat服务器上,HTTPS连接器。如果检查身份验证的 WebFilter 找到身份验证令牌,它不会调用 LoginServlet,但通常会继续调用目标 Servlet。

在Auth0 的服务器上调用/authorize 有两种情况:

  1. 指向静态网页中某个 Servlet S 的链接,由 WebFilter 截获。然后WebFilter调用(如果未找到身份验证令牌(LoginServlet,它使用Auth0成功进行身份验证,这里从来都不是问题。

  2. JS' fetch(( 到 servlet X,被与上面相同的 WebFilter 截获。然后,WebFilter 调用(如果没有找到身份验证令牌(完全相同的 LoginServlet,该 LoginServlet 调用完全相同的/authorize URL。这次它总是失败,并显示"没有'访问控制-允许源'标头"。

然而,如果 WebFilter 找到身份验证令牌并正常转发到 servlet X,那么调用 Auth0/userinfo 也没有问题。

"无'访问控制-允许源'标头"消息指定源,这是正确的,在两种情况下相同,只是应用的域,并且存在于 Auth0 应用程序设置允许的 Web 源和允许的源 (CORS( 中。

问题的根源是什么?如果用户与应用程序的第一次交互是通过 JS,如何对用户进行身份验证?例如,应用程序的页面打开,会话超时,然后用户按下一个键,这会导致JS调用需要身份验证的servlet。

不知道它是否有任何关系,但我在本地机器上运行 Tomcat,所以它也是 Chrome 的本地主机。

另外,刚刚测试过:通过浏览器地址栏中的 URL 或通过单击的链接调用的完全相同的 servlet 登录正常,但通过 fetch(( 调用会导致有问题的 CORS 错误。

从你的JS代码尝试

var auth0Client = new auth0.WebAuth({
clientID: 'YOUR_CLIENT_ID',
domain: 'YOUR_DOMAIN'
});
auth0Client.crossOriginVerification();

而且 将此回调页面的 URL 添加到控制面板中应用程序设置中高级> OAuth 面板下的跨域验证回退字段。

如果不提供反馈,这可能会解决您的问题

最新更新