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

Posted

技术标签:

【中文标题】如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组【英文标题】:How can I get roles or groups from Azure SAML 2.0 Application in Spring Boot 【发布时间】:2019-07-20 06:29:33 【问题描述】:

我有一个 Spring Boot 应用程序,我需要在其中限制对特定端点的访问。到目前为止,我可以使用 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

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

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

【问题讨论】:

【参考方案1】:

下一步是实现您自己的SAMLUserDetailsService,它将返回相应的UserDetail 实例,并授予用户Authorities 权限。

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

【讨论】:

非常感谢您的提示,搜索并为我工作。

以上是关于如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组的主要内容,如果未能解决你的问题,请参考以下文章

如何在apache中从角度调用spring boot api

如何在 Spring Boot 中从双向表关系生成 DTO

如何在 Spring Boot 中从 mongodb 更改 geojson (GeoJsonPolygon) 的编组?

如何在spring boot中从restful控制器返回一个html页面?

如何在 Spring Boot 中从 MongoDb 中仅读取特定的 JSON 节点

如何在我的 Spring Boot 应用程序中从 AWS 访问环境变量