教程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”属性?
3条答案
按热度按时间8xiog9wr1#
它不是组通配符,但如果无状态处理适合您的需要,
可替换为
这将激活
AADAppRoleStatelessAuthenticationFilter
而不是AADAuthenticationFilter
,不需要通过指定组azure.activedirectory.active-directory-groups
. 要使用的角色必须在应用程序清单中声明r55awzrz2#
由于目前不支持组的通配符,因此我通过忽略用户组是否有效来构建一个解决方案。
为此,我复制了com.microsoft.azure.spring.autoconfigure.aad.azureadgraphclient并注解了以下代码片段:
我复制了com.microsoft.azure.spring.autoconfigure.aad.aadoauth2userservice
而不是
在securityconfiguration中,我注入了aad属性:
并在void configure中调用了我自己的aadoauth2userservice(httpsecurity http):
htrmnn0y3#
目前,它不支持为azure active directory组设置通配符。
你可以给你的声音到azure广告反馈,如果其他人有同样的要求,将voteup你。大量的投票将促进这一功能的实现。