使用Keycloak保护Tomcat应用程序时出现HTTP 403禁止错误

ZOU*_*uan 5 java jboss tomcat single-sign-on keycloak

我为这个错误苦苦挣扎了一整天。我一遍又一遍地检查我在tomcat中Keycloak和APP的配置,没有发现错误。

下图为测试场景:

在此输入图像描述

APP配置:

1.Keycloak.json是从Keycloak控制台复制的

2.context.xml 也正确,因为它在“localhost”场景下工作正常

3.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>Keycloak-Tomcat-App</module-name>

<!--
<security-constraint>
    <web-resource-collection>
        <web-resource-name>init pages</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
-->

<security-constraint>
    <web-resource-collection>
        <web-resource-name>All roles pages</web-resource-name>
        <url-pattern>/roles/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>this is ignored currently</realm-name>
</login-config>

<security-role>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <role-name>user</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

Keycloak控制台配置:

我创建一个名为 csf-admin 的用户,并将角色“admin”和“user”分配给 csf-admin

然后

1)在linux.1上使用broswer访问linux.3上部署在TOMCAT中的APP(用户https)

2)我的浏览器可以打开Keycloak认证页面(用户https,linux.2上的keycloak)

3)以csf-admin身份登录keycloak

4)Keycloak将我重定向到APP url(使用https)

5)HTTP 403“已禁止访问指定资源。” 到场

我真的不知道根本原因......需要你的帮助......

mit*_*tal 1

由于问题是在提交登录页面和来自 Keycloak IDP 的重定向之后出现的,因此问题应该出现在客户端应用程序 (APP) 尝试连接到 IDP 以获得访问令牌时。

  1. 从客户端应用程序到 IDP 可能存在连接问题。可以使用 telnet 命令测试它(使用您的 IDP 的 https 端口)。

  2. 可能存在 IDP SSL 证书验证问题。检查是否使用了正确的域名。或者,如果它的 CA 受到您的客户端应用程序的信任。

另请参阅链接的帖子Wildfly Integration with keycloak 403 禁止错误