- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用带有 angular2 的前端和带有 Spring Boot 的 REST 后端来开发 Web 应用程序。
我需要管理 3 种类型的身份验证:
- 对数据库进行基本登录/密码匹配
- LDAP认证
- sso 认证
当用户通过身份验证时,后端会生成一个 JWT 并发送给前端。所有请求都必须在 header 中包含 jwt 才能与 REST 通信。
此时我的网络安全配置是:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableTransactionManagement
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
private static final String LDAP_AUTHENTIFICATION = "ldap";
private static final String SSO_AUTHENTIFICATION = "sso";
@Autowired
private DataBaseAuthentificationProvider authProvider;
@Value("${ldap.provider.url}")
private String ldapProviderUrl;
@Value("${ldap.user.dn.patterns}")
private String userDnPatterns;
@Value("${authentification.type}")
private String authentificationType;
public WebSecurityConfiguration() {
/*
* Ignores the default configuration, useless in our case (session
* management, etc..)
*/
super(true);
}
/**
* Configure AuthenticationManagerBuilder to use the specified
* DetailsService.
*
* @param auth
* the {@link AuthenticationManagerBuilder} to use
* @throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
if (StringUtils.equals(authentificationType, LDAP_AUTHENTIFICATION)) { // LDAP
auth.ldapAuthentication().userDnPatterns(userDnPatterns).contextSource().url(ldapProviderUrl);
} else if (StringUtils.equals(authentificationType, SSO_AUTHENTIFICATION)) { // SSO
} else { // Database
auth.authenticationProvider(authProvider);
}
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
/*
* Overloaded to expose Authenticationmanager's bean created by
* configure(AuthenticationManagerBuilder). This bean is used by the
* AuthenticationController.
*/
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
/*
* the secret key used to signe the JWT token is known exclusively by
* the server. With Nimbus JOSE implementation, it must be at least 256
* characters longs.
*/
String secret = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("secret.key"),
Charset.defaultCharset());
httpSecurity.addFilterAfter(jwtTokenAuthenticationFilter("/**", secret), ExceptionTranslationFilter.class)
.addFilterBefore(new SimpleCORSFilter(), CorsFilter.class)
/*
* Exception management is handled by the
* authenticationEntryPoint (for exceptions related to
* authentications) and by the AccessDeniedHandler (for
* exceptions related to access rights)
*/
.exceptionHandling().authenticationEntryPoint(new SecurityAuthenticationEntryPoint())
.accessDeniedHandler(new RestAccessDeniedHandler()).and()
/*
* anonymous() consider no authentication as being anonymous
* instead of null in the security context.
*/
.anonymous().and()
/* No Http session is used to get the security context */
.sessionManagement().sessionCreationPolicy(STATELESS).and().authorizeRequests()
/*
* All access to the authentication service are permitted
* without authentication (actually as anonymous)
*/
.antMatchers("/auth/**").permitAll()
/*
* All the other requests need an authentication. Role access is
* done on Methods using annotations like @PreAuthorize
*/
.anyRequest().authenticated().and().addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class).csrf()
.csrfTokenRepository(csrfTokenRepository()).disable();
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN"); // this is the name angular
// uses by default.
return repository;
}
private JwtTokenAuthenticationFilter jwtTokenAuthenticationFilter(String path, String secret) {
return new JwtTokenAuthenticationFilter(path, secret);
}
最佳答案
我会坚持使用 JWT,而不是 SAML,它增加了复杂性而没有任何好处,有很多示例如何使用 JWT 保护 REST 服务,并且 openam 支持提供 JWT token 的 OIDC。
一些有用的链接:
OpenAM spring security integration
Springboot OIDC OpenAM
关于java - Spring 安全 SAML OpenAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898770/
我们正在寻求实现开源身份管理系统,并已将 ForgeRock 的堆栈确定为最佳实现技术。 然而,ForgeRock 支持及其按用户定价模型的高成本是一个潜在的障碍。我们目前的用户群约为 45K,但我们
我们正在尝试 openAM OpenIdentity 产品,但我们发现了一个小问题。我们将版本 14.4.2 中的 OpenAM OpenIdentity 与 Tomcat 9 和最新版本的 Java
我有一个系统,其中有 6 个 Java 应用程序服务器,全部由 OpenAM 代理保护。我们在 openAm 中只配置了 1 个代理,一切正常。我确实注意到,如果我在 openam 中终止 sessi
警告!我正在这里钓鱼,我什至不确定我问的问题是否完全有意义。请善待您的回复! :) 最近接手了一个目前基于Java+Linux+Tomcat+MySQL的项目。现在,该系统基本上只是一个网站,在后台有
我正在编写应用程序身份验证逻辑。在处理方法的某个时刻,我需要要求用户选择收到的值。 如何将其重定向到我在 OpenAm 中创建的选择页面?另外这个页面应该位于 openAM 中的什么位置?如何向该页面
我使用 OpenAM fedlet 开发了一个应用程序作为 SP。单点登录工作正常,单点登录也可以从 Idp 进行(Idp 是 SimpleSAMLPHP)。 但是我面临一个问题,当我连接了两个 SP
我有了新的目标。能够使用 ssoadm 创建 openam 的用户。 我已经阅读了Openam的文档 https://wikis.forgerock.org/confluence/display/op
我正在尝试通过 Maven 依赖项下载 OpenAM,如本网站所述: https://wikis.forgerock.org/confluence/display/openam/Using+Maven
在 documentation ,看起来我可以设置纯文本密码而不是加密密码。 com.iplanet.am.service.secret When using a plain text passwor
我们希望使用 OpenAM/OpenSSO 充当 SSO 提供商。然而,我们需要让 OpenAM 在后台使用我们的 mongo 数据存储来管理其身份验证需求。 考虑到这一点,我发现了这个:http:/
我正在使用 openAM 在 Liferay 上配置 openSSO,在我更改 Liferay 后端和 Portal-ext.properties 中的所有内容后,我在控制台中收到此错误 Except
当我在服务器上执行 curl 命令时,我正在运行 openam,只要我使用 FQDN,它就可以正常工作。 curl https://:port/openam/XUI/#login/ 但是,如果我通过
我正在尝试将 wso2 api 管理器集成到我们的组织中。我们使用 Open AM 作为单点登录。我试图为它搜索一些文档,但找不到任何关于 wso2 API 管理器身份验证和可能与 Open AM 集
我正在尝试使用带有 angular2 的前端和带有 Spring Boot 的 REST 后端来开发 Web 应用程序。 我需要管理 3 种类型的身份验证: - 对数据库进行基本登录/密码匹配 - L
您好,我有以下案例。基于 Ajax 的 Javascript 应用程序、OpenAM 代理以及 OpenAM 和 JBoss 以及 REST java Web 服务。 如果我正确理解 OpenAM 文
我正在开发 OpenAM 13.0,以添加一些功能来满足客户的要求。 我想将 CAPTCHA 添加到 XUI 登录页面,作为第一步,我一直在尝试将文本字段添加到登录页面。起初,我尝试在 config
我使用 OpenAM 设置了一个 IIS 服务器。基本上,当我请求一个 url http://ly.asto.asia/test 时,它会重定向到 http://oa.asto.asia:8787/o
一段时间以来,我一直在设置 OpenAM 时遇到问题,但仍然无法使其按预期工作。我希望 OpenAM 能够通过我自己的 EJBCA 副本执行 OCSP 验证用户身份验证。因此,我需要 tomcat 提
我在强制 openAM 使用我的自定义领域登录时遇到了问题。我已将我的 J2EE tomcat 代理配置为使用我的自定义领域/stmdevrealm: com.sun.identity.agents.
我在 linux redhat 6 机器上运行 opends 服务器 (2.2.0),在提示命令“status”时低于服务器的当前状态 尝试使用命令“netstat”检查此机器上监听的端口时,此处未列
我是一名优秀的程序员,十分优秀!