java - SAML 身份验证后,用户似乎未分配给该角色

标签 java tomcat keycloak saml-2.0 tomcat9

我正在尝试在 Apache Tomcat 9.0.24 上设置 SAML 身份验证。我正在使用 keycloak-saml-tomcat-adapter-dist-7.0.0 插件,它应该针对 KeyCloak 独立服务器 (v 7.0.0) 进行身份验证。

我已经在 web.xml 中设置了常用的角色映射,例如:

<security-role>
    <role-name>role0</role-name>
</security-role>
<security-constraint>
   <display-name>Security constraint for the /ktc folder</display-name>
    <web-resource-collection>
        <web-resource-name>/ktc page</web-resource-name>
        <url-pattern>/ktc</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>role0</role-name>
    </auth-constraint>
</security-constraint>

docker 机器正在寻找对方,当我尝试访问 protected 资源/ktc 时,尝试被拦截,我被定向到 keycloak 服务器进行登录。如果我提供无效凭据,则登录尝试会被正确拒绝。此外,如果我提供有效凭据,我将被重定向回我的 Tomcat 网站。

不幸的是,Tomcat 没有将我传递给 protected 资源。如果我再次尝试访问它,第二次我会在屏幕上快速闪烁后被重定向回来,而不会向我显示登录表单。由此我怀疑我实际上已经过身份验证,但没有获得预期的角色分配。 keycloak 服务器事件日志也显示我已登录,但它们没有说明成功的程度以及分配了哪些角色。

我做错了什么?

最佳答案

在KeyCloak认证服务器上配置的POST端点必须以/saml结尾,并且不能指向Tomcat中现有servlet的任何POST端点。只有这样 KeyCloak 阀才会拦截它。

关于java - SAML 身份验证后,用户似乎未分配给该角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57859008/

相关文章:

node.js - NodeJs 和 Keycloak 集成给出 403?

javascript - 如何在 Keycloak 中实现组成员 JavaScript 策略

java - 我怎样才能使我的变量在整个方法中使用

java - Spring Boot 单元测试配置

tomcat - 为什么不能在 WindowsXP SP3 上将 tomcat 作为服务安装?

jakarta-ee - 编译错误 - Tomcat,jsp

spring-boot - 如何将Keycloak注册到Spring Eureka Server

java - AddFolderListener 在某些设备中有效,但在其他设备中无效

java - 即时创建 java 参数化类型

java - tomcat如何知道提供哪个证书