我正在尝试登录我的WSO2管理控制台。它已容器化并托管在AWS EC2实例中。我可以导航到控制台登录页面,但是当我尝试登录时,我收到一条403 Forbidden消息。
可以导航到登录页面
禁止的错误
我知道此问题的原因是我的登录页面未发布X-CSRF-Token
。
在“不良”请求中发布的表单数据示例:
我的WSO2实例的控制台显示如下错误:
WARN {org.owasp.csrfguard.log.JavaLogger} - potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:IP_ADDRESS, method:POST, uri:/carbon/admin/login_action.jsp, error:required token is missing from the request)
在本地WSO2实例中以“良好”请求发布的表单数据示例:
我尝试过的事情:
我尝试按照这篇文章的建议“关闭”压缩功能:wso2 api manger carbon page gives 403 Forbidden
我没有使用标有错误的版本的JDK 1.8.0_151。
如果我禁用csrfguard
中的Owasp.CsrfGuard.Carbon.properties
,则可以解决此问题,但这是安全隐患。
我启用了粘性会话
关于为什么要登录到login_action.jsp页面上的任何想法都会返回403?
编辑
我没有在帖子中提到我正在使用AWS负载均衡器使用TLS终止。我几乎可以肯定,我的问题与此有关。控制台输出中的这一行详细说明了我的错误:
Referer domain https:LOAD_BALANCER_URL/carbon/admin/login.jsp does not match request domain: http://LOAD_BALANCER_URL/carbon/admin/js/csrfPrevention.js
您可以看到引荐来源正在使用https
,但是请求正在使用http
。我相信我希望请求域为https
,但是我不确定该怎么做。我认为第一页正在使用login.jsp
调用https
,而login.jsp
页面正在调用csrfPrevention.js
页面,但是将协议更改为http。 / p>
答案 0 :(得分:0)
请参考OS and JDK incompatibilities矩阵,并确保您没有使用这些OS JDK对之一。
答案 1 :(得分:0)
您的Identity Server前面是否装有负载均衡器?如果是这样,请验证您是否在LB中启用了粘性会话。您可以在指南-docs.wso2.com/display/CLUSTER44x/Configuring+NGINX
中找到示例NGINX的配置。答案 2 :(得分:0)
将Java JDK的版本降低到1.8.0_144。如果不起作用,请转到此位置 wso2Servers / wso2is-5.5.0 / repository / conf / security。 文件名为Owasp.CsrfGuard.Carbon.properties。
在该文件中,有一行 org.owasp.csrfguard.JavascriptServlet.refererMatchDomain = true
将此设置为 org.owasp.csrfguard.JavascriptServlet.refererMatchDomain = false
这对我有用。