I am desperately trying to get CAS to authenticate from our LDAP server and
I tried using the example you posted, modifying the values for our
environment. I seem to be having a lot of trouble with this portion of the
example:

<bean id="ldapAuthenticationHandler"
class="org.jasig.cas.authentication.LdapAuthenticationHandler"
p:principalIdAttribute="cn">
        <constructor-arg ref="authenticator" />
        <property name="principalAttributeMap">
            <map>
                <entry key="mail" value="mail" />
                <entry key="cn" value="cn" />
            </map>
        </property>
    </bean>

The error message I get is:

INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
2015-01-06 14:57:38,344 ERROR
[org.springframework.web.context.ContextLoader] - <Context initialization
failed>
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line
79 in XML document from ServletContext resource
[/WEB-INF/deployerConfigContext.xml] is invalid; nested exception is
org.xml.sax.SAXParseException; lineNumber: 79; columnNumber: 19;
cvc-complex-type.2.3: Element 'map' cannot have character [children],
because the type's content type is element-only.
    at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefi
nitions(XmlBeanDefinitionReader.java:396)
    at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefini
tions(XmlBeanDefinitionReader.java:334)
    at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefini
tions(XmlBeanDefinitionReader.java:302)
    at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadB
eanDefinitions(AbstractBeanDefinitionReader.java:174)
    at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadB
eanDefinitions(AbstractBeanDefinitionReader.java:209)
    at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadB
eanDefinitions(AbstractBeanDefinitionReader.java:180)
    at 
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDef
initions(XmlWebApplicationContext.java:125)
    at 
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDef
initions(XmlWebApplicationContext.java:94)
    at 
org.springframework.context.support.AbstractRefreshableApplicationContext.re
freshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at 
org.springframework.context.support.AbstractApplicationContext.obtainFreshBe
anFactory(AbstractApplicationContext.java:537)
    at 
org.springframework.context.support.AbstractApplicationContext.refresh(Abstr
actApplicationContext.java:451)
    at 
org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicat
ionContext(ContextLoader.java:389)
    at 
org.springframework.web.context.ContextLoader.initWebApplicationContext(Cont
extLoader.java:294)
    at 
org.springframework.web.context.ContextLoaderListener.contextInitialized(Con
textLoaderListener.java:112)
    at 
org.jasig.cas.web.init.SafeContextLoaderListener.contextInitialized(SafeCont
extLoaderListener.java:75)
    at 
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:
4779)
    at 
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:
5273)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:8
95)
    at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at 
org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1095)
    at 
org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1
617)
    at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
46)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
15)
    at java.lang.Thread.run(Thread.java:701)
Caused by: org.xml.sax.SAXParseException; lineNumber: 79; columnNumber: 19;
cvc-complex-type.2.3: Element 'map' cannot have character [children],
because the type's content type is element-only.
    at 
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseEx
ception(ErrorHandlerWrapper.java:198)
    at 
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandl
erWrapper.java:134)
    at 
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErro
rReporter.java:387)
    at 
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErro
rReporter.java:321)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReport
er.reportError(XMLSchemaValidator.java:421)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaEr
ror(XMLSchemaValidator.java:3186)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocally
ValidComplexType(XMLSchemaValidator.java:3149)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocally
ValidType(XMLSchemaValidator.java:3109)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElement
Content(XMLSchemaValidator.java:3011)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndEleme
nt(XMLSchemaValidator.java:2154)
    at 
com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XML
SchemaValidator.java:822)
    at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanE
ndElement(XMLDocumentFragmentScannerImpl.java:1762)
    at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$Fragm
entContentDriver.next(XMLDocumentFragmentScannerImpl.java:2937)
    at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocum
entScannerImpl.java:625)
    at 
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSD
ocumentScannerImpl.java:117)
    at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
ocument(XMLDocumentFragmentScannerImpl.java:489)
    at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
figuration.java:828)
    at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
figuration.java:757)
    at 
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:13
3)
    at 
com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:24
0)
    at 
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBu
ilderImpl.java:292)
    at 
org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(Def
aultDocumentLoader.java:75)
    at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefi
nitions(XmlBeanDefinitionReader.java:388)
    ... 28 more

Anyone have any idea what I am doing wrong?

Thanks so much,
Kristen

On 11/12/14 8:43 AM, "Jason Whitener" <[email protected]> wrote:

> Someone requested that I post my ldap bind deployerConfigContext.xml.  I
> haven't cleaned it up, but it works correctly to bind/search/authenticate
> against a non-ssl ldap.  The cas was version 4.0.0 built using Maven.   
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <beans xmlns="http://www.springframework.org/schema/beans";
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>        xmlns:p="http://www.springframework.org/schema/p";
>        xmlns:c="http://www.springframework.org/schema/c";
>        xmlns:tx="http://www.springframework.org/schema/tx";
>        xmlns:util="http://www.springframework.org/schema/util";
>        xmlns:sec="http://www.springframework.org/schema/security";
>        xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
>        http://www.springframework.org/schema/tx
> http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
>        http://www.springframework.org/schema/security
> http://www.springframework.org/schema/security/spring-security-3.2.xsd
>        http://www.springframework.org/schema/util
> http://www.springframework.org/schema/util/spring-util.xsd";>
> 
> 
> <bean id="authenticationManager"
> class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
>         <constructor-arg>
>             <map>
>                 <entry key-ref="ldapAuthenticationHandler"
> value-ref="usernamePasswordCredentialsResolver" />
>                 
>             </map>
>         </constructor-arg>
>     </bean>
> 
>     <bean id="ldapAuthenticationHandler"
>           class="org.jasig.cas.authentication.LdapAuthenticationHandler"
>           p:principalIdAttribute="change-theLoginAttribute">
>         <constructor-arg ref="authenticator" />
>         <property name="principalAttributeMap">
>             <map>
>                 <entry key="mail" value="mail" />
>                 <entry key="cn" value="cn" />
>             </map>
>         </property>
>     </bean>
> 
>     <bean id="authenticator" class="org.ldaptive.auth.Authenticator"
>           c:resolver-ref="pooledSearchDnResolver"
>           c:handler-ref="pooledBindHandler" />
> 
>     <bean id="connectionConfig" class="org.ldaptive.ConnectionConfig"
>           p:ldapUrl="ldap://change-ldapServer:ldapPort";
>           p:connectTimeout="3000"
>           p:useStartTLS="false"
>           p:connectionInitializer-ref="bindConnectionInitializer"/>
> 
> <bean id="bindConnectionInitializer"
>       class="org.ldaptive.BindConnectionInitializer"
>       p:bindDn="change-bindAccount">
>     <property name="bindCredential">
>         <bean class="org.ldaptive.Credential"
>               c:password="change-bindPassword" />
>     </property>
> </bean>
> 
>     <bean id="ldapPoolConfig" class="org.ldaptive.pool.PoolConfig"
>           p:minPoolSize="3"
>           p:maxPoolSize="10"
>           p:validateOnCheckOut="true"
>           p:validatePeriodically="false"
>           p:validatePeriod="300" />
> 
>     <bean id="pruneStrategy" class="org.ldaptive.pool.IdlePruneStrategy"
>           p:prunePeriod="300"
>           p:idleTime="600" />
> 
>     <bean id="searchValidator" class="org.ldaptive.pool.SearchValidator" />
> 
>     <bean id="connectionPool" class="org.ldaptive.pool.BlockingConnectionPool"
>           init-method="initialize"
>           p:poolConfig-ref="ldapPoolConfig"
>           p:blockWaitTime="3000"
>           p:validator-ref="searchValidator"
>           p:pruneStrategy-ref="pruneStrategy"
>           p:connectionFactory-ref="connectionFactory"/>
> 
>     <bean id="pooledSearchDnResolver"
> class="org.ldaptive.auth.PooledSearchDnResolver"
>           p:baseDn="ou=People,o=pcc.edu <http://pcc.edu> ,o=cp"
>           p:allowMultipleDns="false"
>           p:connectionFactory-ref="pooledConnectionFactory"
>           p:userFilter="pdsLoginId={user}" />
> 
>     <bean id="pooledBindHandler"
> class="org.ldaptive.auth.PooledBindAuthenticationHandler"
>           p:connectionFactory-ref="pooledConnectionFactory" />
> 
>     <bean id="connectionFactory" class="org.ldaptive.DefaultConnectionFactory"
>           p:connectionConfig-ref="connectionConfig" />
> 
>     <bean id="pooledConnectionFactory"
> class="org.ldaptive.pool.PooledConnectionFactory"
>           p:connectionPool-ref="connectionPool" />
> 
>     <!--
>        | Credential-to-principal resolver beans
>        -->
>     <bean id="usernamePasswordCredentialsResolver"
>           
> class="org.jasig.cas.authentication.principal.BasicPrincipalResolver" />
> 
>     <bean id="httpBasedCredentialsResolver"
>           
> class="org.jasig.cas.authentication.principal.BasicPrincipalResolver" />
> 
>     <!-- Required for proxy ticket mechanism. -->
>     <bean id="proxyAuthenticationHandler"
>           
> class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredential
> sAuthenticationHandler"
>           p:httpClient-ref="httpClient" />
> 
> 
>     <bean id="primaryAuthenticationHandler"
>           
> class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
>         <property name="users">
>             <map>
>                 <entry key="casuser" value="Mellon"/>
>             </map>
>         </property>
>     </bean>
> 
>     <!-- Required for proxy ticket mechanism -->
>     <bean id="proxyPrincipalResolver"
>           
> class="org.jasig.cas.authentication.principal.BasicPrincipalResolver" />
> 
>     <!--
>        | Resolves a principal from a credential using an attribute repository
> that is configured to resolve
>        | against a deployer-specific store (e.g. LDAP).
>        -->
>     <bean id="primaryPrincipalResolver"
>           
> class="org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver
> " >
>         <property name="attributeRepository" ref="attributeRepository" />
>     </bean>
> 
>     <!--
>     Bean that defines the attributes that a service may return.  This example
> uses the Stub/Mock version.  A real implementation
>     may go against a database or LDAP server.  The id should remain
> "attributeRepository" though.
>     +-->
>     <bean id="attributeRepository"
> class="org.jasig.services.persondir.support.StubPersonAttributeDao"
>             p:backingMap-ref="attrRepoBackingMap" />
>     
>     <util:map id="attrRepoBackingMap">
>         <entry key="uid" value="uid" />
>         <entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
>         <entry key="groupMembership" value="groupMembership" />
>     </util:map>
> 
>     <!-- 
>     Sample, in-memory data store for the ServiceRegistry. A real
> implementation
>     would probably want to replace this with the JPA-backed ServiceRegistry
> DAO
>     The name of this bean should remain "serviceRegistryDao".
>     +-->
>     <bean id="serviceRegistryDao"
> class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl"
>             p:registeredServices-ref="registeredServicesList" />
> 
>     <util:list id="registeredServicesList">
>         <bean class="org.jasig.cas.services.RegexRegisteredService"
>               p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S)
> and IMAP(S) protocols"
>               p:serviceId="^(https?|imaps?)://.*" p:evaluationOrder="10000001"
> />
>         <!--
>         Use the following definition instead of the above to further restrict
> access
>         to services within your domain (including sub domains).
>         Note that example.com <http://example.com>  must be replaced with the
> domain you wish to permit.
>         This example also demonstrates the configuration of an attribute
> filter
>         that only allows for attributes whose length is 3.
>         -->
>         <!--
>         <bean class="org.jasig.cas.services.RegexRegisteredService">
>             <property name="id" value="1" />
>             <property name="name" value="HTTP and IMAP on example.com
> <http://example.com> " />
>             <property name="description" value="Allows HTTP(S) and IMAP(S)
> protocols on example.com <http://example.com> " />
>             <property name="serviceId"
> value="^(https?|imaps?)://([A-Za-z0-9_-]+\.)*example\.com/.*" />
>             <property name="evaluationOrder" value="0" />
>             <property name="attributeFilter">
>               <bean
> class="org.jasig.cas.services.support.RegisteredServiceRegexAttributeFilter"
> c:regex="^\w{3}$" />
>             </property>
>         </bean>
>         -->
>     </util:list>
>     
>     <bean id="auditTrailManager"
> class="com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager" />
>     
>     <bean id="healthCheckMonitor"
> class="org.jasig.cas.monitor.HealthCheckMonitor" p:monitors-ref="monitorsList"
> />
>   
>     <util:list id="monitorsList">
>       <bean class="org.jasig.cas.monitor.MemoryMonitor"
> p:freeMemoryWarnThreshold="10" />
>       <!--
>         NOTE
>         The following ticket registries support SessionMonitor:
>           * DefaultTicketRegistry
>           * JpaTicketRegistry
>         Remove this monitor if you use an unsupported registry.
>       -->
>       <bean class="org.jasig.cas.monitor.SessionMonitor"
>           p:ticketRegistry-ref="ticketRegistry"
>           p:serviceTicketCountWarnThreshold="5000"
>           p:sessionCountWarnThreshold="100000" />
>     </util:list>
> </beans>
> 
> On Mon, Nov 10, 2014 at 11:31 AM, Jason Whitener <[email protected]> wrote:
>> Hi Alberto/Unicon,
>> 
>> Thanks.  I was able to get everything to work.  
>> 
>> If anyone wants a non-ssl ldap deployerConfig using bind credentials, let me
>> know and I'll post it.  
>> 
>> Jason 
>> 
>> 
>> 
>> 
>> On Mon, Nov 10, 2014 at 1:17 AM, Alberto Cabello Sánchez <[email protected]>
>> wrote:
>>> On Fri, 07 Nov 2014 16:24:13 -0800
>>> Jason Whitener <[email protected]> wrote:
>>> 
>>>> > Would anyone share a complete deployerConfigContext.xml that
>>>> authenticates
>>>> > users against LDAP by means of an authenticated search?
>>>> >
>>>> > I see the documentation here:
>>>> > https://jasig.github.io/cas/4.0.0/installation/LDAP-Authentication.html
>>> 
>>> I have LDAP with direct bind. FWIW, following the aforementioned doc was
>>> rather
>>> confusing to me (too much information at the same time) so I tried to
>>> understand
>>> the meaning of it and started from the basic config that you can find at
>>> 
>>> https://github.com/UniconLabs/simple-cas-overlay-template/blob/master/src/ma
>>> in/webapp/WEB-INF/deployerConfigContext.xml
>>> 
>>> tweaking just a thing at each step.
>>> 
>>>> > But when I try to put the chain of beans, under the "LDAP Requiring
>>>> > Authenticated Search" in my new deployerConfigContext.xml (created using
>>>> > maven), I get a bunch of errors.
>>> 
>>> Maybe it would be helpful to see that errors.
>>> 
>>>> > Based on this thread:
>>>> > https://groups.google.com/forum/#!topic/jasig-cas-user/2G85KtZTL1c , It
>>>> > looks like the bean with id 'authenticationManager' needs to have a entry
>>>> > key-ref value of ldapAuthenticationHandler.
>>> 
>>> Actually, it needs a list of AuthenticationHandlers:
>>> 
>>> "AuthenticationManager - Entry point into authentication subsystem. It
>>> accepts
>>>  one or more credentials and delegates authentication to configured
>>>  AuthenticationHandler components. It collects the results of each attempt
>>> and
>>>  determines effective security policy."
>>> 
>>> https://github.com/Jasig/cas/wiki/Configuring-Authentication-Components
>>> 
>>> 
>>> 
>>> --
>>> Alberto Cabello Sánchez
>>> <[email protected]>
>>> 
>>> --
>>> You are currently subscribed to [email protected] as:
>>> [email protected]
>>> To unsubscribe, change settings or access archives, see
>>> http://www.ja-sig.org/wiki/display/JSG/cas-user
>>> 
>> 
> 

-- 
Kristen Walker
Digital Media Resources Developer
Educational Technology Services
Santa Barbara County Education Office
(805) 964-4711 x 5244
Twitter: @kwalkersb
[email protected]
http://www.sbceoportal.org


-- 
You are currently subscribed to [email protected] as: 
[email protected]
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user

Reply via email to