Grails spring security LDAP 从 LDAP 基础获取 ROLE

Posted

技术标签:

【中文标题】Grails spring security LDAP 从 LDAP 基础获取 ROLE【英文标题】:Grails spring security LDAP get ROLE from LDAP base 【发布时间】:2018-03-02 07:30:05 【问题描述】:

我有一个带有 spring security LDAP auth 3.0.2 的 grails 3.2.5 应用程序。我需要从 LDAP Base 获取角色。

application.yml

plugin:
    springsecurity:
    #LDAP configuration
        logout.postOnly: false
        securityConfigType: 'InterceptUrlMap'
        debug:
            useFilter: true
        #useBasicAuth: true
        providerNames: ['ldapAuthProvider', 'anonymousAuthenticationProvider'] 
        ldap:
            context:
                managerDn: '****'
                managerPassword: '**password**'
                server: 'ldap://**my server**'
            authorities:
                ignorePartialResultException: true # typically needed for Active Directory
                groupSearchFilter: 'member=0' # Active Directory specific - the example settings will
                retrieveGroupRoles: true # to get Roles from LDAP
                groupRoleAttribute: 'cn'
            search:
                base: DC=HQ,DC=ROOT,DC=AD
                filter: 'sAMAccountName=0' # for Active Directory you need this
                searchSubtree: true
                attributesToReturn: ['mailNickName','name','mail','extensionAttribute13','extensionAttribute14','extensionAttribute15','company'] # extra attributes you want returned
            auth:
                hideUserNotFoundExceptions: false

在文档中我发现我需要在application.yml 中设置“retrieveGroupRoles: true”,但是如何查看用户的角色?

您能告诉我如何在控制台或视图中显示用户角色以进行测试吗?我可以通过从 LDAP 中的用户列获取用户角色来重新定义(默认角色从 ldap 'cn' 获取)用户角色吗?

谢谢。

【问题讨论】:

【参考方案1】:

将以下服务注入您的控制器:

def springSecurityService 

然后访问以下角色:

def roles = springSecurityService.getPrincipal().getAuthorities()

此外,当您使用 application.yml 时,您应该像这样指定您的 providerNames 而不是列表样式:

providerNames:
    - ldapAuthProvider
    - anonymousAuthenticationProvider

attributesToReturn 也是如此:

attributesToReturn:
    - mailNickName
....

【讨论】:

我做到了,并在控制台中 println,但它显示“[]”符号(空)。信息:我有自定义 userDetail,它写在 spring-security-ldap 文档链接第 2.3 段中。我可能需要在自定义 userDetail 中添加角色吗? 一定要在一个组中检查你的,LDAP 管理员很适合这方面的事情ldapadmin.org 用其他观察更新答案 非常感谢你是对的。我在 LDAP 基础中没有角色。 我找到了您关于grails ldap 的答案,它在任何地方都对我有帮助。非常感谢,问题已解决。

以上是关于Grails spring security LDAP 从 LDAP 基础获取 ROLE的主要内容,如果未能解决你的问题,请参考以下文章

Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密

grails-spring-security-rest 插件和悲观锁定

Grails + spring-security-core:用户登录后如何分配角色?

Grails Spring Security注释问题

Grails Spring Security 插件网址

Grails spring-security-oauth-google:如何设置