我尝试在我的项目中集成Spring Security SAML。我体验过okta的演示。我知道URI /saml/SSO用于使用Idp中的SAML响应。但是我在我的Idp中注册了一个与URI /saml/SSO不同的消费-uri,它不能更改。
因此,我必须找到一种方法来更改默认的SSO进程URL。
我想我需要在下一步做一些改变:
public FilterChainProxy samlFilter() throws Exception {
List<SecurityFilterChain> chains = new ArrayList<>();
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/login/**"),
samlEntryPoint));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/logout/**"),
samlLogoutFilter));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/metadata/**"),
metadataDisplayFilter));
// chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SSO/**"),
// samlWebSSOProcessingFilter()));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/consume/**"),
samlWebSSOProcessingFilter()));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SSOHoK/**"),
samlWebSSOHoKProcessingFilter()));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SingleLogout/**"),
samlLogoutProcessingFilter));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/discovery/**"),
samlDiscovery));
return new FilterChainProxy(chains);
}
public class CustomSAMLProcessingFilter extends SAMLProcessingFilter {
public CustomSAMLProcessingFilter() {
this("/saml/consume");
}
public CustomSAMLProcessingFilter(String defaultFilterProcessesUrl) {
super(defaultFilterProcessesUrl);
}
@Override
protected String getProfileName() {
return super.getProfileName();
}
@Override
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
return super.requiresAuthentication(request, response);
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
return super.attemptAuthentication(request, response);
}
}
@Bean
public SAMLProcessingFilter samlWebSSOProcessingFilter() throws Exception {
// SAMLProcessingFilter samlWebSSOProcessingFilter = new SAMLProcessingFilter();
SAMLProcessingFilter samlWebSSOProcessingFilter = new CustomSAMLProcessingFilter("/saml/consume");
samlWebSSOProcessingFilter.setAuthenticationManager(authenticationManager());
samlWebSSOProcessingFilter.setAuthenticationSuccessHandler(samlAuthSuccessHandler);
samlWebSSOProcessingFilter.setAuthenticationFailureHandler(samlAuthFailureHandler);
return samlWebSSOProcessingFilter;
}
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/pre-auth**").permitAll()
.antMatchers("/form-login**").permitAll()
.antMatchers("/error").permitAll()
.antMatchers("/saml/**").permitAll()
.antMatchers("/saml2/**").permitAll()
.antMatchers("/css/**").permitAll()
.antMatchers("/img/**").permitAll()
.antMatchers("/js/**").permitAll()
.antMatchers("/sw.js").permitAll()
.anyRequest().authenticated();
之后,当我尝试登录时,过滤器链中没有任何反应。在控制台中,我的项目收到了SAML响应,但没有更多反应。网页显示错误页面。
当我之前做过Okat演示时,它得到了我的登录信息并显示在成功页面中。
我想知道如何更改默认SSO进程URL并成功登录。请你们给我一些想法或建议来帮助我解决这个问题,谢谢!
您似乎正在使用旧的处于维护模式的spring security saml项目。请改用Spring Security的SAML支持。
在Spring Security的SAML支持中,断言ConsumerServiceLocation的默认值是登录/saml2/sso/{registrationId}
应用程序将处理任何包含SAMLResponse参数的POST请求。
您可以在创建相关PartyRegistration时对此进行自定义。
如果您使用的是Spring Boot,您可以在application.yml.中配置它
spring:
security:
saml2:
relyingparty:
registration:
one:
identityprovider:
metadata-uri: https://idp/metadata.php
acs:
location: "{baseUrl}/custom/{registrationId}"
要更新登录处理URL,您可以自定义HttpSecurity
http
.saml2Login(saml2 -> saml2
.loginProcessingUrl("/custom/{registrationId}")
);
问题内容: 尝试更改列的数据类型并设置新的默认值时遇到以下错误: 错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’VARCHAR(255)NOT NULL SET DEFAULT’{}’‘附近使用正确的语法 问题答案: 同样的第二种可能性(感谢juergen_d):
在尝试更改列的数据类型并设置新的默认值时,我遇到以下错误: 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,以了解第1行“varchar(255)NOT NULL SET DEFAULT”{}“附近使用的正确语法
问题内容: 如何更改默认的Virtualenvwrapper提示符?默认情况下,使用“ workon <name_of_env>”之类的命令在特定的虚拟环境上工作,会将virtualenv的名称添加到提示中。如果您未使用默认命令提示符,则此方法可能效果不佳。 问题答案: 默认情况下,当使用命令“ workon ”切换到virtualenv时,virtualenvwrapper将在字符串(( ))前
问题内容: 我使用IntelliJ IDEA作为开发环境,并使用Maven进行依赖项管理。我经常在IDEA之外构建我的项目结构(目录,poms等),然后使用将该项目导入。这很好用,除了在poms中我指定maven-compiler-plugin应该使用JDK 1.6,并且在导入时,IDEA通知我和,然后提示重新加载项目。这很烦人,因为我总是使用相同的JDK版本。 如何更改IntelliJ IDEA
xampp中的php.ini文件位于此处: phpinfo包含以下信息: 配置文件(php.ini)路径C:\WINDOWS 已加载的配置文件(无) 扫描此目录以获取更多信息。ini文件(无) 如何更改目录?
当启动一个流浪者盒子时,“默认”这个名字来自哪里? 有没有办法设定这个?
我如何更改IntelliJ IDEA使用的默认JDK,这样我就不必在每次导入新项目时重新加载我的项目了?
问题内容: 我有一个表,其中的列类型为默认值,每次更新都更新为。 我想删除此列上的“更新时”功能。如何编写alter语句? 我尝试了以下方法: 但这没用。 问题答案: 皮特几乎是正确的,但对“更改”使用了错误的语法: 请注意,您必须重复列名。另外,请确保您使用反引号而不是单引号来转义列名时间,以防止将其解释为mysql列时间类型。 通过指定CURRENT_TIMESTAMP的默认值,MySQL将不