Glad that it worked for you! If any of our documentation is weak, please feel free to help us fix it!
Cheers, Scott On Mon, May 17, 2010 at 9:27 AM, Acevedo User <[email protected]> wrote: > Thank you! Looked like Greek to me on Friday, today it made perfect > sense. > > For the record here is what I had to do: > > Cas Client web.xml > > <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> > > <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> > <init-param> > <param-name>roleAttribute</param-name> > <param-value>Roles</param-value> > </init-param> > </filter> > > Then in the Cas client jsp file: > > <%if (request.isUserInRole(" PersonInfo")) { %> <b>You have the > role PersonInfo!<b> <% } %> > > On 5/15/10 12:06 AM, "Scott Battaglia" <[email protected]> wrote: > > I'm not sure I follow. You're trying to use the attributes in your CAS > client. So I'm not sure why you're showing me server configuration (unless > I'm misunderstanding you). > > If you're using this: > > https://www.ja-sig.org/svn/cas-clients/java-client/trunk/cas-client-core/src/main/java/org/jasig/cas/client/util/HttpServletRequestWrapperFilter.java > > You can specify the attribute to use for roles as part of your config (the > init-param is "roleAttribute"). > > Cheers, > Scott > > > On Fri, May 14, 2010 at 4:01 PM, Acevedo User <[email protected]> wrote: > > Do you mean the ldapAuthProvider bean? Below is my config file. I have > the ldap provider bean commented out because I could not get it working and > was going to try again later. > > My deployerConfigContext.xml > > <code> > <?xml version="1.0" encoding="UTF-8"?> <!-- | deployerConfigContext.xml > centralizes into one file some of the declarative configuration that | > all CAS deployers will need to modify. | | This file declares some of > the Spring-managed JavaBeans that make up a CAS deployment. | The beans > declared in this file are instantiated at context initialization time by the > Spring | ContextLoaderListener declared in web.xml. It finds this file > because this | file is among those declared in the context parameter > "contextConfigLocation". | | By far the most common change you will > need to make in this file is to change the last bean | declaration to > replace the default SimpleTestUsernamePasswordAuthenticationHandler with > | one implementing your approach for authenticating usernames and > passwords. +--> <beans xmlns=" > http://www.springframework.org/schema/beans < > http://www.springframework.org/schema/beans> " xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance" xmlns:p=" > http://www.springframework.org/schema/p < > http://www.springframework.org/schema/p> " xmlns:security=" > http://www.springframework.org/schema/security < > http://www.springframework.org/schema/security> " > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd > http://www.springframework.org/schema/security > http://www.springframework.org/schema/security/spring-security-2.0.xsd" < > http://www.springframework.org/schema/security/spring-security-2.0.xsd%22> > > <!-- | This bean declares our AuthenticationManager. The > CentralAuthenticationService service bean | declared in > applicationContext.xml picks up this AuthenticationManager by reference to > its id, | "authenticationManager". Most deployers will be able to > use the default AuthenticationManager | implementation and so do not > need to change the class of this bean. We include the whole | > AuthenticationManager here in the userConfigContext.xml so that you can see > the things you will | need to change in context. +--> <bean > id="authenticationManager" > class="org.jasig.cas.authentication.AuthenticationManagerImpl"> > <!-- | This is the List of CredentialToPrincipalResolvers > that identify what Principal is trying to authenticate. | The > AuthenticationManagerImpl considers them in order, finding a > CredentialToPrincipalResolver which | supports the presented > credentials. | | AuthenticationManagerImpl uses these > resolvers for two purposes. First, it uses them to identify the Principal > | attempting to authenticate to CAS /login . In the default > configuration, it is the DefaultCredentialsToPrincipalResolver | > that fills this role. If you are using some other kind of credentials than > UsernamePasswordCredentials, you will need to replace | > DefaultCredentialsToPrincipalResolver with a CredentialsToPrincipalResolver > that supports the credentials you are | using. | > | Second, AuthenticationManagerImpl uses these resolvers to > identify a service requesting a proxy granting ticket. | In the > default configuration, it is the > HttpBasedServiceCredentialsToPrincipalResolver that serves this purpose. > | You will need to change this list if you are identifying > services by something more or other than their callback URL. +--> > <property name="credentialsToPrincipalResolvers"> <list> > <bean > class="org.jasig.cas.authentication.principal.CredentialsToLDAPAttributePrincipalResolver"> > <!-- The Principal resolver form the credentials --> > <property name="credentialsToPrincipalResolver"> > <bean > class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" > /> </property> <!-- > The query made to find the Principal ID. > "%u" will be replaced by the resolved Principal > --> <property name="filter" > value="(uid=%u)" /> <!-- The attribute used to define > the new Principal ID --> <property > name="principalAttributeName" value="uid" /> <property > name="searchBase" value="ou=People,dc=vccs,dc=edu" /> > <property name="contextSource" ref="contextSource" /> > <property name="attributeRepository"> > <ref bean="attribRepository" /> > </property> </bean> <!-- > | HttpBasedServiceCredentialsToPrincipalResolver supports > HttpBasedCredentials. It supports the CAS 2.0 approach of > | authenticating services by SSL callback, extracting the > callback URL from the Credentials and representing it as a > | SimpleService identified by that callback URL. > | | If you are representing services > by something more or other than an HTTPS URL whereat they are able to > | receive a proxy callback, you will need to change this > bean declaration (or add additional declarations). +--> > <!--<bean > > class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" > />--> </list> </property> <!-- | > Whereas CredentialsToPrincipalResolvers identify who it is some Credentials > might authenticate, | AuthenticationHandlers actually > authenticate credentials. Here we declare the AuthenticationHandlers that > | authenticate the Principals that the > CredentialsToPrincipalResolvers identified. CAS will try these handlers in > turn | until it finds one that both supports the Credentials > presented and succeeds in authenticating. +--> <property > name="authenticationHandlers"> <list> <!-- > | This is the authentication handler that authenticates > services by means of callback via SSL, thereby validating > | a server side SSL certificate. +--> > <bean > class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" > p:httpClient-ref="httpClient" /> <!-- > | This is the authentication handler declaration that > every CAS deployer will need to change before deploying CAS > | into production. The default > SimpleTestUsernamePasswordAuthenticationHandler authenticates > UsernamePasswordCredentials | where the username equals > the password. You will need to replace this with an AuthenticationHandler > that implements your | local authentication strategy. > You might accomplish this by coding a new such handler and declaring > | edu.someschool.its.cas.MySpecialHandler here, or you > might use one of the handlers provided in the adaptors modules. > +--> <bean > class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" > > <property name="filter" > value="uid=%u,ou=People,dc=vccs,dc=edu" /> <property > name="contextSource" ref="contextSource" /> </bean> > </list> </property> </bean> <!-- This bean > defines the security roles for the Services Management application. Simple > deployments can use the in-memory version. More robust deployments will > want to use another option, such as the Jdbc version. The name of > this should remain "userDetailsService" in order for Acegi to find it. > To use this, you should add an entry similar to the following between the > two value tags: battags=notused,ROLE_ADMIN where battags is the > username you want to grant access to. You can put one entry per line. > --> <bean id="userDetailsService" > class="org.springframework.security.userdetails.memory.InMemoryDaoImpl"> > <property name="userMap"> <value> </value> > </property> </bean> <bean id="contextSource" > class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> > <constructor-arg value="ldapserver:389"/> <property name="userDn" > value="user"/> <property name="password" value="xxxxx"/> </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"> > <property name="backingMap"> <map> <entry > key="uid" value="uid" /> <entry key="cn" value="Name" /> > <entry key="sn" value="LastName" /> <entry > key="Role" value="Roles"/> <entry key="givenName" > value="Firstname"/> <entry key="mail" value="email"/> > </map> </property> </bean> <bean > id="attribRepository" > class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao"> > <property name="contextSource" ref="contextSource" /> <property > name="baseDN" value="ou=People,dc=vccs,dc=edu" /> <property > name="requireAllQueryAttributes" value="true" /> <!-- Attribute mapping > beetween principal (key) and LDAP (value) names used to perform the LDAP > search. By default, multiple search criteria are ANDed together. Set the > queryType property to change to OR. --> <property > name="queryAttributeMapping"> <map> <entry > key="username" value="uid" /> </map> </property> > <property name="resultAttributeMapping"> <map> > <!-- Mapping beetween LDAP entry attributes (key) and Principal's > (value) --> <entry key="cn" value="Name"/> <entry > key="sn" value="LastName"/> <entry key="Role" value="Roles"/> > <entry key="givenName" value="Firstname"/> <entry > key="mail" value="email"/> </map> </property> </bean> > <!-- 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"> <property > name="registeredServices"> <list> <bean class = > "org.jasig.cas.services.RegisteredServiceImpl" p:id ="1" > p:description="mywebapp Nova" p:serviceId="**/nova/**" > p:name="mywebapp_nova" p:theme="NOVA" p:allowedToProxy="true" > p:enabled="true" p:ssoEnabled="true" p:anonymousAccess="false"> <property > name="allowedAttributes" value="uid,Name,LastName,Roles,Firstname,email" /> > </bean> <bean class = > "org.jasig.cas.services.RegisteredServiceImpl" p:id ="2" > p:description="mywebapp TCC" p:serviceId="**/tc295/**" p:name="mywebapp_tcc" > p:theme="TC295" p:allowedToProxy="true" p:enabled="true" p:ssoEnabled="true" > p:anonymousAccess="false"> <property name="allowedAttributes" > value="uid,Name,LastName,Firstname" /> </bean> > </list> </property> </bean> <!--<bean id="ldapAuthProvider" > class="org.springframework.security.providers.ldap.LdapAuthenticationProvider"> > <constructor-arg> <bean > class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator"> > <constructor-arg ref="contextSource"/> <property name="userSearch" > ref="userSearch" /> </bean> </constructor-arg> <constructor-arg> <bean > class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator"> > <constructor-arg ref="contextSource"/> <constructor-arg value=""/> <property > name="groupRoleAttribute" value="Role"/> </bean> </constructor-arg> </bean> > <bean id="userSearch" > class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> > <constructor-arg index="0" value=""/> <constructor-arg index="1" > value="(uid={0})"/> <constructor-arg index="2" ref="contextSource" /></bean> > --> </beans> </code> > > > > > On 5/14/10 3:14 PM, "Scott Battaglia" <[email protected] < > http://[email protected]> > wrote: > > There's some config you need to do on the wrapping filter to get it to > chose which attribute to read from. Did you do that? > > > On Fri, May 14, 2010 at 3:08 PM, Acevedo User <[email protected] < > http://[email protected]> > wrote: > > Ok I got it to a point where cas server authenticates using ldap. The CAS > client webapp directs to CAS and then the user can authenticate. > > In my web app I can list the attributes: > > <code> > AttributePrincipal principal = (AttributePrincipal) > request.getUserPrincipal(); > > Map attributes = principal.getAttributes(); > > > if (attributes.size() > 0) { > > > out.println("You have " + attributes.size() + " attributes : <br/>"); > > Iterator keyIterator = attributes.keySet().iterator(); > > > while (keyIterator.hasNext()) { > > > Object key = keyIterator.next(); > > Object value = attributes.get(key); > > out.println("<b>" + key + "</b>" + " : " + value + "<br>"); > > } > > } else { > > out.println("You have no attributes set"); > > } > > </code> > > The problem I have now is using "request.isUserInRole" I can't get it to > match against roles. > > On 5/14/10 2:58 PM, "Marvin Addison" <[email protected] < > http://[email protected]> > wrote: > > >> What I would like to do is be able to specify a list of attributes to > >> return, when I am authenticating a user. Is there anything like that > >> available in CAS? > > > > Yes. You'll want to use the attribute release feature of CAS in > > conjunction with the SAML protocol. Two good CASUM wiki links: > > 1. http://www.ja-sig.org/wiki/display/CASUM/Attributes > > 2. http://www.ja-sig.org/wiki/display/CASUM/SAML+1.1 > > > > M > > Emilio S. Acevedo > Enterprise Software Developer > Virginia's Community Colleges > 1-804-423-6758 > > > -- > You are currently subscribed to [email protected] < > http://[email protected]> as: [email protected] < > http://[email protected]> > To unsubscribe, change settings or access archives, see > http://www.ja-sig.org/wiki/display/JSG/cas-user > > > Emilio S. Acevedo > Enterprise Software Developer > Virginia's Community Colleges > 1-804-423-6758 > > > Emilio S. Acevedo > Enterprise Software Developer > Virginia's Community Colleges > 1-804-423-6758 > > -- > 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 > > -- 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
