我正在使用WildFly应用程序服务器,它在我的本地计算机上托管一个简单的前端后端组合。前端通过Keycloak JS适配器得到保护,Backend被用于使用Keycloak WildFly适配器。
我有正确的keycloak.json(在WEB-INF文件夹中),我的web.xml如下所示:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<module-name>restservice</module-name>
<display-name>RESTful Service</display-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>Brokerservice</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>default</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>AuthInterface</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
</security-constraint>
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>this is ignored currently</realm-name>
</login-config>
<security-role>
<role-name>default</role-name>
</security-role>
</web-app>
部署顺利进行,我可以访问并登录该部署中托管的前端,但是当我尝试从我的后端请求某些内容时,我返回了401 Unauthorized。持票人令牌有效并按照Keycloak的文档的指示发送给服务。同时,控制台读取
Error when sending request to retrieve realm keys: org.keycloak.adapters.HttpClientAdapterException: IO error
完整的服务器日志可用here。由于此问题仅限于本地REST服务(我可以连接并从我公司的网络中的其他Keycloak安全服务检索数据),我怀疑这是我的WildFly配置的问题。目前,它是一个干净的安装,只添加了Keycloak适配器并通过命令行启用。
任何形式的帮助表示赞赏。
我的朋友,我找到了解决方案!我确实是本地配置问题,但不是在WildFly中,而是在我的Java Keystore中。必须将公司SSL证书添加到cacerts
密钥库,该密钥库是与JAVA_HOME
变量关联的Java分发的一部分(在我的例子中,jdk1.8.0_181)。具体来说,您可以使用此命令进行设置:
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_181\jre\lib\security\cacerts" -alias [alias] -storepass [password] -file [path/to/your/certificate]
请注意,如果找不到“keytool”,请导航到JDK的bin并从那里执行命令。执行起源在此处无效。