Auth0 / authorize如果由通过JS提取依次调用的Servlet调用,则将导致“没有'Access-Control-Allow-Origin'标头”

问题描述 投票:0回答:1

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

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

  1. 到静态网页中某些Servlet S的链接,被WebFilter拦截。然后,WebFilter调用(如果未找到身份验证令牌)LoginServlet,它成功使用Auth0进行了身份验证,这里永远不会出现问题。

  2. JS'fetch()到Servlet X,由与上面相同的WebFilter拦截。然后,WebFilter调用(同样,如果未找到身份验证令牌)完全相同的LoginServlet,后者调用完全相同的/ authorize URL。这次,它总是失败,并带有“没有'Access-Control-Allow-Origin'标头”。

但是,如果WebFilter找到身份验证令牌并将其正常转发到Servlet X,则依次调用Auth0 / userinfo不会有任何问题。

“ No'Access-Control-Allow-Origin'标头中没有消息指定了Origin,这是正确的,在两种情况下都是相同的,只是应用程序的域相同,并且存在于Auth0应用程序设置中允许的Web起源和允许的起源(CORS) 。

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

不知道是否有任何事情要做,但是我在本地计算机上运行Tomcat,因此它也是Chrome的本地主机。

还进行了测试:通过浏览器地址栏中的URL或通过单击的链接调用的servlet完全相同,但通过fetch()调用的servlet导致了相关的CORS错误。

javascript servlets cors fetch auth0
1个回答
-1
投票

从您的JS代码开始尝试

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

还有将此回调页面的URL添加到仪表板中“高级”>“ OAuth”面板下“应用程序”设置中的“跨域验证后备”字段。

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

© www.soinside.com 2019 - 2024. All rights reserved.