当前位置: 首页 > 知识库问答 >
问题:

Spring Security和Azure:有活动目录组通配符吗?

严狐若
2023-03-14

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。

不考虑两个小差异(这里解释了OpenID连接登录Office 365和spring security ),这工作得很好。

在我的申请中。属性有一个属性:

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

并且只是不要使用@PreAuthoriza("hasRole('[组/角色名称]')")

这是有效的(只要您的应用程序对角色名称不感兴趣),但感觉不正确。a)是否有“正确”的方法来设置通配符active-目录-组?b)org.springframework.security.core.Authentication.getAuthorities()似乎只提供在该属性中输入的组名/角色名,因此解决方法不提供任何(但ROLE_USER)。我想在用户处读取所有组/角色。所以我问第二个问题:如何在不知道所有角色的情况下从org.springframework.security.core.Authentication.getAuthorities()获取所有角色,尤其是在不将所有角色输入“azure.activedirectory.active-目录-组”属性的情况下?

共有3个答案

薛兴德
2023-03-14

由于目前不支持组的通配符,我通过忽略用户组是否有效来构建解决方法。

为此,我做了一个com.microsoft.azure.spring.autoconfigure.aad.AzureADGraphClient的副本,并注释掉了这个代码片段:

.filter(this::isValidUserGroupToGrantAuthority)

我做了一份2UserServicecom.microsoft.azure.spring.autoconfigure.aad.AADOAuth

graphClient = new MyAzureADGraphClient(...

而不是

graphClient = new AzureADGraphClient(...

在安全配置中,我注入了AAD属性:

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

并调用了我自己的AADOAuth2UserService在空配置(HttpSecurity超文本传输协议):

EvaAADOAuth2UserService oidcUserService = new EvaAADOAuth2UserService(aadAuthenticationProperties, serviceEndpointsProps);
httpSecurity.oauth2Login().loginPage(LOGIN_URL).permitAll().userInfoEndpoint().oidcUserService(oidcUserService);
王炜
2023-03-14

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

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

可替换为:

azure.activedirectory.session-stateless=true

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

薛弘阔
2023-03-14

目前,它不支持为azure active directory组设置通配符。

你可以为 Azure 广告反馈提供语音,如果其他人有相同的需求,则会投票支持你。许多投票将促进此功能的实现。

 类似资料:
  • 我正在通过以下URL为功能应用程序执行azure active directory身份验证https://www.c-sharpcorner.com/article/secure-azure-function-with-azure-ad/ 但是,当我通过功能应用程序点击我的url时,它会给我未经授权的权限,我还需要做其他事情吗 请查看以下屏幕截图。 非常感谢您的帮助

  • 我在这里有很多问题要解决。一直试图将上述3项技术集成到我们的WebApp中…我们要使用 null web.xml: 我的servlet-context.xml: My manager-context.xml: 编辑2 我认为主要的问题是SpringSecurity需要webapp上下文(ContextLoaderListener)才能工作,但web应用程序是在servlet上下文中运行的。控制器方

  • 我正在尝试在此YouTube视频之后在Azure上设置PnP合作伙伴包。由于我的试用版 Azure 存储订阅已过期,我正在尝试使用我公司的 Azure 存储,但其 Azure 帐户未连接到 Office 365 租户。因此,我创建了一个试用版 Office 365 帐户,现在我正在尝试将 Office 365 连接到 Azure 存储。 这些不在同一账户下。有人能帮我设置一下吗? 编辑1假设您调用

  • 本文向大家介绍SpringBoot 配合 SpringSecurity 实现自动登录功能的代码,包括了SpringBoot 配合 SpringSecurity 实现自动登录功能的代码的使用技巧和注意事项,需要的朋友参考一下 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事。 自动登录功能

  • 问题内容: 和MySQL中的通配符有什么区别? 在这样的查询中: 问题答案: 只能在全文搜索中用作通配符(或截断),而(匹配0个或更多字符)和(恰好匹配一个字符)仅适用于LIKE查询。

  • 我正在为Dart寻找一个好的ldap库,用于连接Microsoft Active Directory。我找到了dartdap,但我似乎无法让它工作。我百分之百相信我的CN和密码是正确的,因为我可以连接到Active directory,例如使用lpap浏览器。 我得到的错误是:未捕获错误:无效凭据(49)msg=80090308:ldaper:DSID-0C0903A9,注释:AcceptSecu