【发布时间】:2016-03-14 04:13:12
【问题描述】:
一个多星期以来,我一直在努力拦截 SSO cookie,然后授权服务器将我的应用页面重定向。
我正在为 openid 配置实现mitreid-connect。我已按照链接中的文档进行操作,并使用 Java Config 对其进行了配置。一切正常,重定向等,但我正在尝试实现AbstractPreAuthenticatedProcessingFilter 以在授权服务器使用它并生成 IdToken 之前拦截 SSO cookie。
如果这不正确,请告诉我。我对 spring-security 很陌生,它把我的鳞片刮掉了,它让我抓狂如何抓住 sso cookie
我找到了这个link
请帮帮我
@Configuration
public class filter extends AbstractPreAuthenticatedProcessingFilter {
@Bean(name = "singleSignOnFilter")
public String filter() {
return "PRE_AUTH_FILTER";
}
@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
return null;
}
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
Cookie[] cookie = request.getCookies();
for(int i = 0; i < cookie.length; i++) {
System.out.println(cookie[i].getName() + " - " + cookie[i].getValue());
}
return null;
}
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Inject
private ClientDetailsEntity client;
@Inject
private String issuer;
@Bean
public ProviderManager providerManager() {
List<AuthenticationProvider> authenticationProvider = new LinkedList<AuthenticationProvider>();
authenticationProvider.add(oidcAuthProvider());
return new ProviderManager(authenticationProvider);
}
@Bean(name = "authenticationProvider")
public AuthenticationProvider oidcAuthProvider() {
return new OIDCAuthenticationProvider();
}
@Bean(name = "authoritiesMapper")
public OIDCAuthoritiesMapper authorityMapper() {
NamedAdminAuthoritiesMapper namedAdminAuthMapper = new NamedAdminAuthoritiesMapper();
namedAdminAuthMapper.setAdmins(admins());
return namedAdminAuthMapper;
}
@Bean(name = "admins")
public Set<SubjectIssuerGrantedAuthority> admins() {
Set<SubjectIssuerGrantedAuthority> admin = new HashSet<SubjectIssuerGrantedAuthority>();
return admin;
}
@Bean(name = "openIdConnectAuthenticationFilter")
public Filter openIdConnectAuthenticationFilter() {
OIDCAuthenticationFilter oidcAuthFilter = new OIDCAuthenticationFilter();
oidcAuthFilter.setAuthenticationManager(providerManager());
oidcAuthFilter.setIssuerService(issuerService());
oidcAuthFilter.setClientConfigurationService(clientConfigurationService());
oidcAuthFilter.setAuthRequestUrlBuilder(authRequestUrlBuilder());
return oidcAuthFilter;
}
@Bean(name = "issuerService")
public IssuerService issuerService() {
StaticSingleIssuerService issuerService = new StaticSingleIssuerService();
issuerService.setIssuer(issuer);
return issuerService;
}
@Bean(name = "clientConfigurationService")
public ClientConfigurationService clientConfigurationService() {
StaticClientConfigurationService clientConfigService = new StaticClientConfigurationService();
clientConfigService.setClients(registeredClient());
return clientConfigService;
}
@Bean(name = "clients")
public Map<String, RegisteredClient> registeredClient() {
Map<String, RegisteredClient> oidcRegClients = new HashMap<String, RegisteredClient>();
oidcRegClients.put(issuer, new RegisteredClient(client));
return oidcRegClients;
}
@Bean(name = "authRequestUrlBuilder")
public AuthRequestUrlBuilder authRequestUrlBuilder() {
return new PlainAuthRequestUrlBuilder();
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(openIdConnectAuthenticationFilter(), AbstractPreAuthenticatedProcessingFilter.class)
.formLogin()
.loginPage("/openid_connect_login")
.and()
.logout()
.and()
.authorizeRequests()
.antMatchers("/items")
.authenticated()
.anyRequest()
.permitAll();
}
}
【问题讨论】:
-
sso cookie 是什么意思?授权服务器会话的 cookie?
-
所以当我点击我的应用程序网址时,授权服务器会将我带到身份验证页面,例如谷歌登录页面。在这里,我提供了我的凭据和登录名,因此我被分配了 sso cookie。在这里之后,我得到一个允许访问的页面。一旦我点击允许,页面就会被重定向到我的应用程序,现在我的 cookie 不在这里。我可以在 cookie 消失之前拦截它吗
标签: spring spring-security spring-java-config openid-connect