spring安全和azure:是否有一个activedirectory组通配符?

flseospp  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(345)

教程https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory 解释如何在microsoft azure active directory上设置具有身份验证的Spring Security 。
忽略两个小差异(这里解释了openidconnect使用office365和springsecurity登录),这可以正常工作。
在my application.properties中有以下属性:

azure.activedirectory.active-directory-groups=myADUserGroup

(提示:azure.activedirectory.active-directory-groups似乎是较新的azure.activedirectory.user-group.allowed-groups的弃用版本…)
我不想局限于特定的群体。对于我的用例,每个拥有有效microsoft帐户的用户都可以。将属性留空甚至删除属性都会导致此异常:

Caused by: java.lang.IllegalStateException: One of the User Group Properties must be populated. Please populate azure.activedirectory.user-group.allowed-groups
at com.microsoft.azure.spring.autoconfigure.aad.AADAuthenticationProperties.validateUserGroupProperties(AADAuthenticationProperties.java:148) ~[azure-spring-boot-2.3.1.jar:na]

一种可能的解决方法是为application.properties中的属性输入任意组名:

azure.activedirectory.active-directory-groups=some-arbitrary-group-name-doesnt-matter

只是不要使用 @PreAuthorize("hasRole('[group / role name]')") .
这是可行的(只要你的应用程序对角色名不感兴趣),但感觉不正确。a) 有没有“正确”的方法来设置通配符active directory组?b) org.springframework.security.core.authentication.getauthorities()似乎只传递在该属性中输入的组名/角色名,因此解决方案不传递任何组名/角色名(除了角色\用户)。我想阅读用户的所有组/角色。因此,我要问第二个问题:如何从org.springframework.security.core.authentication.getAuthories()获取所有角色,而不知道所有角色,尤其是不将所有角色输入“azure.activedirectory.activedirectory groups”属性?

8xiog9wr

8xiog9wr1#

它不是组通配符,但如果无状态处理适合您的需要,

azure.activedirectory.active-directory-groups=...

可替换为

azure.activedirectory.session-stateless=true

这将激活 AADAppRoleStatelessAuthenticationFilter 而不是 AADAuthenticationFilter ,不需要通过指定组 azure.activedirectory.active-directory-groups . 要使用的角色必须在应用程序清单中声明

r55awzrz

r55awzrz2#

由于目前不支持组的通配符,因此我通过忽略用户组是否有效来构建一个解决方案。
为此,我复制了com.microsoft.azure.spring.autoconfigure.aad.azureadgraphclient并注解了以下代码片段:

.filter(this::isValidUserGroupToGrantAuthority)

我复制了com.microsoft.azure.spring.autoconfigure.aad.aadoauth2userservice

graphClient = new MyAzureADGraphClient(...

而不是

graphClient = new AzureADGraphClient(...

在securityconfiguration中,我注入了aad属性:

@Autowired(required = false) private AADAuthenticationProperties aadAuthenticationProperties;
@Autowired(required = false) private ServiceEndpointsProperties serviceEndpointsProps;

并在void configure中调用了我自己的aadoauth2userservice(httpsecurity http):

EvaAADOAuth2UserService oidcUserService = new EvaAADOAuth2UserService(aadAuthenticationProperties, serviceEndpointsProps);
httpSecurity.oauth2Login().loginPage(LOGIN_URL).permitAll().userInfoEndpoint().oidcUserService(oidcUserService);
htrmnn0y

htrmnn0y3#

目前,它不支持为azure active directory组设置通配符。
你可以给你的声音到azure广告反馈,如果其他人有同样的要求,将voteup你。大量的投票将促进这一功能的实现。

相关问题