Spring Security SAML:从saml2p:Response中提取属性作为用户属性 - java

昨天我一直在研究Spring Security Yaml,以使其与Okta SAML一起使用。登录有效,但是响应XML包含用户属性,这些用户属性显然无法自动提取到属性映射中。响应包含这样的字段

<saml2:Attribute Name="user.lastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
  <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
    Surname
  </saml2:AttributeValue>
</saml2:Attribute>

认证成功后,我想将其放入认证信息中。通过github / oauth登录时,OAuth2AuthenticatedPrincipal类具有属性映射,但是Saml2AuthenticatedPrincipal仅具有名称。

解决这个问题的正确方法是什么?

现在,我正在考虑一个自定义的AuthenticationSuccessHandler,它通过第二次解析提供的XML响应(通过Saml2AuthenticatedPrincipalWithAttributes)(或将它们放入会话中)来填充一个包含所有属性的自定义.getDetails()类。

我有一种直觉,那就是这可能不是做事的春天,我很乐意得到第二意见。在您四处搜寻时,主要是在合并到Spring Security之前找到Spring Security Saml的示例,由于处理的类不再存在,它似乎处理起来有些不同。

感谢大家的帮助!

参考方案

在Spring Security(5.4.0)的下一个发行版中,您应该可以执行this之类的操作:

@GetMapping("/")
public String index(Model model,
    @AuthenticationPrincipal Saml2AuthenticatedPrincipal principal) {
    String emailAddress = principal.getFirstAttribute("emailAddress");
    model.addAttribute("emailAddress", emailAddress);
    model.addAttribute("userAttributes", principal.getAttributes());
    return "index";
}

目前,我不知道有比您更好的解决方法。

Spring MVC Web应用程序检测暴力攻击的最佳方法? - java

Spring 3.0 MVC中是否有专门用于帮助检测Web应用程序的身份验证/登录页面上的蛮力攻击的功能? 参考方案 经过长期验证的实践是,如果身份验证失败,则会引入随机但相当大的延迟。这样,合法用户将立即登录,但攻击者每次尝试将花费500ms-1s,这使整个暴力概念不切实际(将永远存在)。合法用户偶尔失败的登录只会使他们稍有延迟,并且不会引起注意。如果需要…

Spring Security @Secured批注和用户权限 - java

这是关于Spring v.4(MVC +安全性)的。我已经实现了UserDetailsServiceImpl,其中在loadUserByUsername方法内部向用户授予了其权限。说的很简单:public UserDetails loadUserByUsername(String username) { ... Collection<GrantedAu…

Spring Security更改登录用户的角色不会立即生效 - java

我正在使用Spring Security 3.2。在更改其角色后,我可以动态地重新加载当前用户的授权:UserDetailsImpl userDetails = new UserDetailsImpl(dao.getEntity(User.class,currentUserService.getUserDetails().getUsername())); A…

Spring Security不允许加载CSS或JS资源 - java

该资源位于src / main / resources / static / css或src / main / resources / static / js下,我使用的是Spring Boot,安全级别为:@Configuration @EnableWebMvcSecurity @EnableGlobalAuthentication public clas…

春季安全值得付出努力 - java

我一直在关注春季安全性,并注意到它是多么大的包装。我想知道是否值得花一些时间来加强这一点。Spring Security 2.0+为您节省了大量时间,还是以任何方式简化了您的项目? java参考方案 几年前,我考虑将其用于Spring项目,并选择了它,因为它是一个非常繁琐的框架,恕我直言,它提供的灵活性不是必需的。 (据我估计)减少我们自己的身份验证/授权的…