我正在尝试通过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。
1条答案
按热度按时间sy5wg1nm1#
也许您应该尝试@CrossOrigin注解。
More information about a CORS support in Spring Framework you can find on spring.io website