在 PDP API 响应 WSO2IS 5.10.0 的“access-control-allow-origin”标头中接收多个值

问题描述

我正在使用 WSO2IS 的 PDP 端点,预检请求的响应在 Access-Control-Allow-Origin 标头中包含多个值,这在浏览器中造成了问题:

我的 web.xml 配置如下所示:

 <filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET,HEAD,POST,DELETE,OPTIONS,PATCH,PUT</param-value>
    </init-param>
    <init-param>
               <param-name>cors.exposedHeaders</param-name>
               <param-value>Access-Control-Allow-Origin,Location</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

控制台中的确切日志:

从源“http://localhost:8000”访问“https://{base-url}:9443/api/identity/entitlement/decision/pdp”的 XMLHttpRequest 已被 CORS 策略阻止:响应预检请求未通过访问控制检查:'Access-Control-Allow-Origin' 标头包含多个值 '*,http://localhost:8000',但只允许一个

我尝试了以下链接中提供的建议:https://github.com/wso2/identity-apps#run-in-dev-mode

此配置有什么问题,或者我是否需要更改其他配置才能使其正常工作?

解决方法

如果您尝试使用 IS 5.11 版,则必须将 [1] 中给出的此配置应用于 deploymet.toml 文件。从 5.11 开始,我们使用新的 cors 配置模型 [2]。所以[1] 仅适用于 IS5.11.0 以后。因此,应用文档 [1] 中给出的配置不适用于以前的版本。

由于您使用的是 IS5.10.0(如果它不是 5.10.0 wum 更新包),请将以下配置添加到位于 /repository/resources/conf/templates/repository/ 的 web.xml.j2 文件中conf/tomcat/web.xml.j2.

<filter-name>CORS</filter-name>
     <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
     <init-param>
         <param-name>cors.allowOrigin</param-name>
         <param-value>*</param-value>
     </init-param>
    <init-param>
             <param-name>cors.exposedHeaders</param-name>
             <param-value>Location</param-value>
         </init-param>
         <init-param>
             <param-name>cors.supportedMethods</param-name>
             <param-value>GET,HEAD,POST,DELETE,OPTIONS,PATCH,PUT</param-value>
         </init-param>
     </filter>
    
     <filter-mapping>
         <filter-name>CORS</filter-name>
         <url-pattern>/*</url-pattern>
         <dispatcher>FORWARD</dispatcher>
         <dispatcher>REQUEST</dispatcher>
     </filter-mapping>

如果您使用的是 5.10.0 wum 包,那么您需要将配置添加到 deployment.toml 文件中。参考git issue[3]

[1]https://github.com/wso2/identity-apps#run-in-dev-mode

[2]https://wso2.com/blogs/thesource/cors-with-wso2-identity-server-5.11/

[3]https://github.com/wso2/carbon-kernel/pull/2698