【问题标题】:Auth0 /authorize causes "No 'Access-Control-Allow-Origin' header" if called by servlet called in turn via JS fetch如果通过 JS fetch 依次调用 servlet 调用,Auth0 /authorize 会导致“No 'Access-Control-Allow-Origin' header”
【发布时间】:2020-05-21 06:13:12
【问题描述】:

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

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

  1. 静态网页中某个 servlet S 的链接,被 WebFilter 截获。 WebFilter 然后调用(如果未找到身份验证令牌)使用 Auth0 成功进行身份验证的 LoginServlet,这里从来没有问题。

  2. JS 的 fetch() 到 servlet X,被上面相同的 WebFilter 拦截。 WebFilter 然后调用(同样,如果没有找到身份验证令牌)完全相同的 LoginServlet,它调用完全相同的 /authorize URL。这一次它总是以“No 'Access-Control-Allow-Origin' header”失败。

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

“No 'Access-Control-Allow-Origin' header”消息指定了 Origin,这是正确的,在两种情况下都相同,只是应用程序的域,并且存在于 Auth0 应用程序设置 Allowed Web Origins 和 Allowed origins (CORS )。

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

不知道有没有什么关系,但是我在本地机器上运行Tomcat,所以它也是Chrome的localhost。

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

【问题讨论】:

    标签: javascript servlets cors fetch auth0


    【解决方案1】:

    从你的JS代码尝试

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

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

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

    【讨论】:

    • 他们使用的是 Tomcat 而不是 Apache HTTPD。他们还声称他们已经设置了 CORS 配置。
    • @Quentin: "JS' fetch() 到一个 servlet X,被上面相同的 WebFilter 拦截。WebFilter 然后调用(再次,如果没有找到 auth 令牌)完全相同的 LoginServlet,它调用了相同的 /authorize URL。这次它总是以“No 'Access-Control-Allow-Origin' header”失败。
    • 我在 localhost 上运行 tomcat,但由于 /etc/hosts 可以通过 Internet 名称访问它。不知道是不是有什么关系。无论如何,通过浏览器地址栏中的 URL 调用或通过单击的链接登录的完全相同的 servlet,通过 fetch() 调用会导致相关的 CORS 错误。
    • 也就是说,外部可以同名访问。
    猜你喜欢
    • 2017-12-29
    • 2023-01-13
    • 2018-11-10
    • 1970-01-01
    • 2020-11-08
    • 2018-07-24
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多