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

使用Spring Security的Active目录进行X509身份验证

司寇羽
2023-03-14

您好,我是Spring security的新手,
我的任务是通过匹配从x509客户端证书检索到的用户名,根据active directory对用户进行身份验证。到目前为止,我所做的是启用ssl相互身份验证

现在我有了html" target="_blank">安全措施,上面的部分工作正常。xml文件,我在其中配置了与x509参考和Active directory配置相关的所有内容

      <global-method-security secured-annotations="enabled" />

             <http > 
              <intercept-url pattern="/**" access="ROLE_USER,ROLE_ANONYMOUS" requires-     channel="https"/>
     <intercept-url pattern="/UserLogin/*"  access="ROLE_ADMIN,ROLE_USER" requires-channel="https"/>
         <x509 subject-principal-regex="CN=(.*?)," user-service-ref="ldapUserService" />  
</http>

<authentication-manager>
         <authentication-provider user-service-ref="ldapUserService" />
 </authentication-manager>

  <bean:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
  <bean:constructor-arg value="ldap://ActiveDirectoryURL:389/CN=example,DC=net"/>
  <bean:property name="userDn" value="mkanaka@example.local"/>
<bean:property name="password" value="secuera1SMK"/>
</bean:bean> 

<bean:bean name="ldapUserService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService">
    <bean:constructor-arg ref="ldapUserSearch"/>
    <bean:constructor-arg ref="ldapAuthoritiesPopulator"/>
</bean:bean>
<bean:bean name="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <bean:constructor-arg value=""/>
    <bean:constructor-arg value="(&amp;(sAMAccountName={0})(objectclass=Users))"/>
    <bean:constructor-arg ref="contextSource" />
</bean:bean>
<bean:bean name="ldapAuthoritiesPopulator" 

class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
    <bean:constructor-arg ref="contextSource" />
    <bean:constructor-arg value="" />
    <bean:property name="groupSearchFilter" value="member={0}" />
    <bean:property name="searchSubtree" value="true" />
</bean:bean>

现在我面临的问题是,当我试图检索SecurityContextHolder.getContext(). getAuthentiation(). getMain();它的返回类型是字符串而不是用户详细信息(在日志记录时使用的证书详细信息),字符串输出为getMain()是匿名用户和它给出的权限是ROLE_ANONYMOUS,但是当我调用getAuthentication.is身份验证()时,它返回true。我用的是tomcat 7, Spring Security3.1
可能是什么问题请在这方面帮助我

共有1个答案

马晓博
2023-03-14

在您的配置中,从证书中提取的用户名将是“Mohankumar Kanaka”,这就是Spring Security将尝试使用的身份验证。

使用LDAP配置,它将搜索具有与此匹配的sAMAccountName属性的目录条目(它找不到)。

您需要某种方法将证书中的名称映射到Active Directory条目。Spring Security不可能自动为您做到这一点。理想情况下,证书中的主题名称的一部分应该与广告用户名匹配,这样您就可以轻松地提取它。

 类似资料:
  • 如何将Liquibase与Azure SQL数据库和Azure Active Directory身份验证一起使用?具体地说,我想使用ActiveDirectoryPassword身份验证模式进行连接,如下所述: https://docs.microsoft.com/en-us/sql/connect/jdbc/connecting-using-azure-active-directory-auth

  • 我有一个Spring MVC应用程序(使用3.0.5版本),需要使用Spring LDAP绑定到Active Directory,以便简单且仅验证用户的凭据。该应用程序托管在Linux服务器上,因此我需要一个跨平台的解决方案。并且应用程序不使用Spring Security性。 在此设置中实现用户身份验证的有效方法是什么?Active Directory支持FastBind控件(id=

  • 在我配置了下面的配置之后,它不会连接到Active Directory。我无法使用Active Directory的帐户登录。会有什么问题? 我有一个Ubuntu服务器18.04,带有ApacheGuacamoleV1。0.0. 安装。我想使用LDAP身份验证来验证用户。我已经下载了鳄梨酱-auth-ldap-1.0.0。jar和jldap-4.3。jar扩展。 10.10.10.21,10.10

  • 问题内容: 我有一个使用Java针对Active Directory进行身份验证的简单任务。只需验证凭据,别无其他。假设我的域是“ fun.xyz.tld”,OU路径未知,并且用户名/密码是testu / testp。 我知道那里有一些Java库可以简化此任务,但是我没有成功实现它们。我发现的大多数示例都是针对LDAP的,而不是针对Active Directory的。发出LDAP请求意味着在其中发

  • 试图弄清楚LDAP-身份验证是什么。我可以使用LDAP对MS Active Directory、Samba4、FreeIPA和OpenLDAP进行身份验证,对吗? 因此,这四个软件都可以保存用户的Auth-data。但是为什么Windows身份验证服务不能对OpenLDAP进行身份验证呢?什么AD可以告诉Windows操作系统,而OpenLDAP不能告诉它?

  • 问题内容: 是否有人对如何使用HTTPClient 4.0.1通过x509证书执行客户端身份验证有任何友好的提示? 感谢您的时间。 问题答案: 这是一些代码,助您一臂之力。该是包含客户端证书的对象。如果服务器使用的是自签名证书,或者包含的cacerts文件中的JVM认可的不是CA所签名的证书,则需要使用。否则,要使用默认的cacerts文件,请传递给truststore参数。