Keycloak安全的WildFly REST服务返回401 Unauthorized

问题描述 投票:1回答:1

我正在使用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适配器并通过命令行启用。

任何形式的帮助表示赞赏。

java keycloak wildfly-10 http-status-code-401 keycloak-services
1个回答
0
投票

我的朋友,我找到了解决方案!我确实是本地配置问题,但不是在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并从那里执行命令。执行起源在此处无效。

© www.soinside.com 2019 - 2024. All rights reserved.