在我的环境中运行代码时,我必须首先禁用CSRF令牌检查 WebSecurityConfig#configure(HttpSecurity) ,因为它阻止了Prisma IDP接受SAML响应。我是这样做的:
WebSecurityConfig#configure(HttpSecurity)
http.csrf().disable();
在单点登录开始工作之后,响应消息被接受了,但是你的 demo.components.SAMLUserDetailsServiceImpl 拒绝它,因为用户的ID与您的条件不符 if (userID.compareTo("jdoe@samplemail.com") != 0) 在那里指定。 (从Prisma服务返回的用户ID是类似于“246c7aaffc73d7b3cea43d35f14bf86a59557b37”的标识符)。
demo.components.SAMLUserDetailsServiceImpl
if (userID.compareTo("jdoe@samplemail.com") != 0)
该 SSOUserAccountNotExistsException 您抛出的异常将用户发送回EntryPoint(这可能会导致永久循环)。
SSOUserAccountNotExistsException
一旦我删除了 if 条件我能够成功完成单点登录过程。
if
我相信您上面发布的日志仍然不完整。我必须通过创建文件启用日志记录 src/main/resources/logback.xml 具有以下内容:
src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <logger name="org.springframework.security" level="DEBUG"/> <logger name="org.springframework.security.saml" level="DEBUG"/> <logger name="org.opensaml" level="DEBUG"/> <logger name="PROTOCOL_MESSAGE" level="DEBUG"/> </configuration>