Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”

Posted

技术标签:

【中文标题】Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”【英文标题】:Ldap user authorization failed - Unhandled Spring authentication "Access is denied" 【发布时间】:2018-06-24 02:02:24 【问题描述】:

问题:

我们有 REST 服务,我们将通过 ldap 进行身份验证。 没有 ldap 安全性的 REST 服务可以正常工作。 REST 服务在 PAS 实例上运行(进步技术)

当我按下登录按钮时,我们使用表单并填写了我们的凭据,然后我收到了错误消息。当我阅读日志文件时,我可以看到: 登录到 LDAP 服务器没问题,但是当它尝试对用户进行身份验证时,我是个例外。

我们使用tomcat 8.5.23版

编辑 16/01/2018 09:24

我已根据最新信息更新了整个问题。 如果我将此 grouprole 属性设置为 cn:

ldap.grouprole.attribute=cn

我在日志中看到我们得到了进一步的信息,但现在我们得到了另一个错误。

错误信息:

访问被拒绝 - 403 状态码

之前没有设置 ldap grouprole 属性的错误消息(供更多读者阅读):

java.lang.IllegalArgumentException: 名称不能为空 => 初始错误消息

记录消息:

oepas1.DATE.log 显示以下内容:

09:04:40.550/20215 [catalina-exec-5] 调试 o.s.l.c.s.AbstractContextSource - 在服务器“我们的内部 ip”上获取 Ldap 上下文 09:04:40.553/20218 [catalina-exec-5] 调试 o.s.s.l.u.DefaultLdapAuthoritiesPopulator - 来自搜索的角色:[Makelaars] 09:04:40.560/20225 [catalina-exec-5] WARN cpassOEAuthenticationLogger - 未处理的 Spring 身份验证事件:org.springframework.security.web.authentication.session.SessionFixationProtectionEvent[source=org.springframework.security .authentication.UsernamePasswordAuthenticationToken@5d0c4105: Principal: org.springframework.security.ldap.userdetails.InetOrgPerson@aa53233b: Dn: cn=Test C&C,ou=Users,ou=Domain BPB,dc=bpb,dc=be;用户名:tc;密码保护];启用:真; AccountNonExpired:真; CredentialsNonExpired:真; AccountNonLocked:真;授予权限:ROLE_MAKELAARS;凭证:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@fffc7f0c:RemoteIpAddress:0:0:0:0:0:0:0:1;会话ID:991C2EE38AA27E364FFB812CD6BFC9ABDD85795BF2F8.oepas1;授予权限:ROLE_MAKELAARS]

我的配置:(WEB-INF 文件夹中的oeablSecurity.properties)

http.all.authmanager=ldap client.login.model=form ldap.url="内部 ldap 网址" ldap.manager-dn=cn=广告阅读器,ou=特殊用户,ou=域名 BPB,dc=bpb,dc=be ldap.manager-password=topsecret ldap.root.dn= ldap.grouprole.attribute=tc ldap.groupsearch.filter=(成员=0) ldap.groupsearch.base=cn=Makelaars,ou=组,ou=域 BPB,dc=bpb,dc=be ldap.usersearch.base=ou=用户,ou=域 BPB,dc=bpb,dc=be ldap.usersearch.filter=(sAMAccountName=0)

预期的解决方案:

我希望在我按下登录按钮并看到来自 REST 服务的响应 JSON 后用户已正确验证。 (通过ldap认证后)

【问题讨论】:

【参考方案1】:

您可以查看 oeablSecurity.csv 文件。 你需要把正确的角色放在那里。 例如 "web/test/","","hasAnyRole('rol1', 'rol2')"

【讨论】:

以上是关于Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”的主要内容,如果未能解决你的问题,请参考以下文章

如何通过数据库的LDAP和基于角色的授权实现Spring安全?

未分配 Grails Spring Security LDAP“defaultRole”

如何在 Spring Security 中阻止 LDAP 用户帐户而不锁定 LDAP 用户?

如何为 LDAP 和 JDBC 配置 Spring?

通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误

基于 SAML 的 SSO 用于身份验证和 LDAP 用于授权 - Spring Boot Security