如何在 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>)
然后您必须将这些值与应用程序中定义的权限列表进行映射。
我有一个 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>)
然后您必须将这些值与应用程序中定义的权限列表进行映射。