Spring Security JavaSpring:使用2 localhost向Keycloak请求的资源上不存在“Access-Control-Allow-Origin”标头

vshtjzan  于 2022-12-18  发布在  Spring
关注(0)|答案(1)|浏览(135)

我正在尝试通过spring security认证应用服务连接react-python应用的keycloak。
localhost:3000 react-python应用程序使用localhost:80中的身份验证服务(spring-java应用程序)。然后,localhost:80将使用localhost:4000中的keycloak服务器进行配置

我测试的内容:
--------尝试直接访问:80到:4000(密钥隐藏)-成功
响应标题

缓存控制:无缓存、无存储、最长使用期限=0、必须重新验证
连接:保持活动状态
内容长度:0
日期:2022年12月17日星期六22:59:21 GMT
失效日期:0
保持活动状态:超时=60
位置:http://localhost:4000/auth/realms/aip-realm/protocol/openid-connect/身份验证?响应类型=代码和客户端标识...
杂注:无缓存
X-内容-类型-选项:诺斯尼夫
X形框架-选项:山芝麻素
X-XSS-保护:1;模式=块

请求标题

缓存控制:无缓存、无存储、最长使用期限=0、必须重新验证
连接:保持活动状态
内容长度:0
日期:2022年12月17日星期六22:59:21 GMT
失效日期:0
保持活动状态:超时=60
位置:http://本地主机:4000/身份验证/领域/aip领域/协议/开放ID连接/身份验证?响应类型=代码&客户端ID...
杂注:无缓存
X-内容-类型-选项:诺斯尼夫
X形框架-选项:山芝麻素
X-XSS-保护:1;模式=块

-------尝试通过80访问3000以连接密钥罩4000 -CORS错误

获取http://localhost:4000/oauth2/authorization/keycloak网络::错误失败302我收到了错误消息。
CORS策略已阻止从源“http://localhost:3000”访问位于“http://localhost:80/oauth2/authorization/keycloak”的XMLHttpRequest(从“http://localhost:3000/login”重定向):请求的资源上不存在“Access-Control-Allow-Origin”标头。

1.在第二次重定向之前,第一个仍然有效。
类型:XHR/重定向
响应标题

访问控制允许凭据:真
访问控制允许标头:*
访问控制允许方法:发布、获取、选项、删除
访问控制允许来源:*
访问控制最大期限:180
缓存控制:无缓存、无存储、最长使用期限=0、必须重新验证
连接:保持活动状态
内容长度:0
日期:2022年12月18日星期日09:15:55 GMT失效日期:0
位置:http://localhost:80/oauth2/authorization/keycloak
杂注:无缓存

辅助读取模式:导航严格传输安全性:最大年龄=31536000;包含子域

X-内容-类型-选项:诺斯尼夫
X形框架-选项:山芝麻素
X-XSS-保护:1;模式=块

**接受请求标头:应用程序/json、文本/纯文本、/

接受编码:压缩、放气、br
接受语言:fr-FR,fr;q=0.9
连接:保持活动状态
Cookie:联合会话ID = 1B 5EE 995 A0031 DC 34 E6860027398 CD 68
主机:本地主机:3000
参考地址:http://localhost:3000/
sec-chua:“不是一个品牌”; v=“8”,“ chrome ”; v=“108”、“谷歌浏览器”; v=“108”
sec-ch-ua-移动电话:?0
sec-ch-ua平台:“ windows ”
次级提取目标:空的

辅助读取模式:cors辅助提取站点:同源的

用户代理:Mozilla/5.0( windows NT 10.0; Win 64; x64)苹果网络工具包/537.36(KHTML,类似于壁虎)Chrome浏览器108.0.0.0Safari浏览器/537.36

2.则密钥罩错误请求(CORS错误):
型号:XHR
**响应标题

缓存控制:无缓存、无存储、最长使用期限=0、必须重新验证
连接:保持活动状态
内容长度:0
日期:2022年12月18日星期日09:15:55 GMT
失效日期:0
保持活动状态:超时=60
位置:http://本地主机:4000/身份验证/领域/aip领域/协议/开放ID连接/身份验证?响应类型=代码&客户端ID...
杂注:无缓存
设置Cookie:会话ID = 185783 DD 1403 AC 2D 6CC 222350 D842 CD 8;路径=/;仅HttpOnly
X-内容-类型-选项:诺斯尼夫
X形框架-选项:山芝麻素
X-XSS-保护:1;模式=块

请求标头

接受:应用程序/json、文本/纯文本、/
接受编码:压缩、放气、br
接受语言:fr-FR,fr;q=0.9
连接:保持活动状态

主机:本地主机:80
来源:http://本地主机:3000
参考地址:http://localhost:3000/

sec-chua:“不是一个品牌”; v=“8”,“ chrome ”; v=“108”、“谷歌浏览器”; v=“108”
sec-ch-ua-移动电话:?0
sec-ch-ua平台:“ windows ”
次级提取目标:空的

辅助读取模式:更正

Sec-Fetch-站点:同址
用户代理:Mozilla/5.0( windows NT 10.0; Win 64; x64)苹果网络工具包/537.36(KHTML,类似于壁虎)Chrome浏览器108.0.0.0Safari浏览器/537.36
下面是Oauth2的配置:

http.oauth2Login()
        .and()
        .exceptionHandling()
        // Specific entry point for failed authentication
        .authenticationEntryPoint(getEntryPoint())
        .and()
        .oauth2ResourceServer().jwt().jwtAuthenticationConverter(jwtAuthenticationConverter());

http.addFilterAfter(corsFilter(), SessionManagementFilter.class);
...
public class CorsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request= (HttpServletRequest) servletRequest;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Max-Age", "180");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}
private AuthenticationEntryPoint getEntryPoint() {
    return (request, response, authException) -> {
        if (authException != null) {
            response.sendRedirect("/oauth2/authorization/keycloak");
        } else {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
        }
    };
}

有人对这个问题有经验吗?:)
我想当尝试访问:3000它仍然是重定向到keycloak:4000通过auten服务:80。

相关问题