如何在 Spring 引导中从 Azure SAML 2.0 应用程序获取角色或组

How can I get roles or groups from Azure SAML 2.0 Application in Spring Boot

我有一个 spring 引导应用程序,我需要在其中限制对特定端点的访问。到目前为止,我可以使用 SAML 2.0 针对 Azure 进行身份验证。

这是Spring中认证的主要配置

@Override
 protected void configure(HttpSecurity http) throws Exception {

  http
    .exceptionHandling()
    .authenticationEntryPoint(samlEntryPoint());

  http
    .csrf()
    .disable();


  http
    .addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
    .addFilterAfter(samlFilter(), BasicAuthenticationFilter.class);

  http
    .authorizeRequests()
    .antMatchers("/error").permitAll()
    .antMatchers("/saml/**").permitAll()
    .anyRequest().authenticated();

  http
    .logout()
    .logoutSuccessUrl("/");

 }

在 Azure 中,我已将角色添加到声明值中,如下图所示

Azure Claims

我的目标是能够 evantaully 执行以下操作:

@GetMapping("/")
 @PreAuthorize("hasRole('User')")
 public String getSample(Principal principal) {
  log.info("Get Request");
  return "Hello";
 }

下一步将是实现您自己的 SAMLUserDetailsService,该 return 相应的 UserDetail 实例具有授予用户的 Authorities 权限。

您必须从 SAMLCredential 检索 Azure 角色列表(类似于 credential.getAtttributeAsString(<your_attribute_name>) 然后您必须将这些值与应用程序中定义的权限列表进行映射。