Are you manually calling CAS server validation endpoint or using CAS client 
library? In other words - how do you get that validation XML response that you 
are showing?

Few pointers - for validation, CAS4 has 4 (I believe off the top of my head):

1) Legacy: /validate
2) CAS2 protocol: /serviceValidate
3) CAS3 protocol: /p3/serviceValidate
4) SAML: /samlValidate

there are also proxy validation stuff, but let's skip that for this 
conversation. 

Attributes in validation response are only supported by SAML and p3 endpoints. 
I think you'd need to make sure you configure your CAS client library to use 
that. And I only know of the latest CAS Java client supports p3 validation, but 
have no idea of any other client libraries updated to support that. 

Hope that gives you a few more pointers. 

Best,
Dmitriy. 



Sent from my iPhone

> On Jan 6, 2016, at 16:34, John Bruestle <[email protected]> wrote:
> 
> Thanks.  I updated the Authentication Manager configuration to read:
> 
> <entry key-ref="primaryAuthenticationHandler" value="#{null}" />
> 
> I am not sure how I how or where I would "ensure you are pointing to the 
> correct endpoint for attributes, whether that is SAML or CAS", so I'm not 
> sure about that
> 
> My Authentication Handler is setting attributes using:
> 
> final Map<String, Object> attributes = new HashMap<>();
> attributes.put("abc", "123");
> attributes.put("def", "456");
> return createHandlerResult(credential, 
> this.principalFactory.createPrincipal(username), null);
> 
> But I am still getting the username in my Validation Response:
> 
> <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas";>
>       <cas:authenticationSuccess>
>               <cas:user>john</cas:user>
>       </cas:authenticationSuccess>
> </cas:serviceResponse>
> 
> Here is my service definiteion:
> 
> {
>   "@class" : "org.jasig.cas.services.RegexRegisteredService",
>   "serviceId" : "^http://localhost/bonfire/cas/.*";,
>   "name" : "Bonfire Development",
>   "id" : 10000017,
>   "description" : "Bonfire Development CAS Single Sign-On 2",
>   "proxyPolicy" : {
>     "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy"
>   },
>   "evaluationOrder" : 0,
>   "usernameAttributeProvider" : {
>     "@class" : 
> "org.jasig.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider",
>     "usernameAttribute" : "def"
>   },
>     "attributeReleasePolicy" : {
>     "@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
>   },
>   "logoutType" : "BACK_CHANNEL"
> 
> 
> 
> Here is my entire deployerConfigContext.xml;
> 
> <?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.xsd
>        http://www.springframework.org/schema/tx 
> http://www.springframework.org/schema/tx/spring-tx.xsd
>        http://www.springframework.org/schema/security 
> http://www.springframework.org/schema/security/spring-security.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="proxyAuthenticationHandler" 
> value-ref="proxyPrincipalResolver" />
>                 <entry key-ref="primaryAuthenticationHandler" value="#{null}" 
> />
>             </map>
>         </constructor-arg>
> 
>         <property name="authenticationPolicy">
>             <bean 
> class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />
>         </property>
>     </bean>
> 
>     <!-- Required for proxy ticket mechanism. -->
>     <bean id="proxyAuthenticationHandler"
>           
> class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
>           p:httpClient-ref="supportsTrustStoreSslSocketFactoryHttpClient" />
>    
>       <bean id="dataSource" 
> class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>               <property name="driverClassName" 
> value="net.sourceforge.jtds.jdbc.Driver"/>
>               <property name="url" 
> value="jdbc:jtds:sqlserver://localhost/Bonfire;integrated security=false"/>
>               <property name="username" value="xxxxx"/>
>               <property name="password" value="xxxxxxxxxxxx"/>
>               </bean>
> 
>       <bean id="primaryAuthenticationHandler"
>               class="org.jasig.cas.adaptors.jdbc.BonfireAuthenticationHandler"
>               p:dataSource-ref="dataSource"
>               p:sql="EXEC dbo.LoginAuthenticateCAS ?, ?, ?"
>               />
>               
>     <!-- Required for proxy ticket mechanism -->
>     <bean id="proxyPrincipalResolver"
>           
> class="org.jasig.cas.authentication.principal.BasicPrincipalResolver" />
> 
>                 <bean id="primaryPrincipalResolver"
>           
> class="org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver"
>           p:principalFactory-ref="principalFactory" />
>       
>     <bean id="serviceRegistryDao" 
> class="org.jasig.cas.services.JsonServiceRegistryDao"
>           
> c:configDirectory="${service.registry.config.location:classpath:services}" />
> 
>     <bean id="auditTrailManager" 
> class="org.jasig.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" />
>         <bean class="org.jasig.cas.monitor.SessionMonitor"
>               p:ticketRegistry-ref="ticketRegistry"
>               p:serviceTicketCountWarnThreshold="5000"
>               p:sessionCountWarnThreshold="100000" />
>     </util:list>
> </beans>
> 
> 
> 
>> On Wed, Jan 6, 2016 at 2:54 PM, Misagh Moayyed <[email protected]> wrote:
>> You do not need to define an attribute repository at all. Your attribute 
>> repository is your handler, since it’s acting as a repository of user 
>> attributes for you. (It is possible to merge the attributes your handler 
>> returns and the attributes of a separate repository, but I don’t think you 
>> want that in this case)
>> 
>>  
>> 
>> So, you need to ensure:
>> 
>>  
>> 
>> 1.       Your attribute repository is nulled out, and its associated 
>> resolver is nulled out. See 
>> https://jasig.github.io/cas/4.1.x/installation/Configuring-Principal-Resolution.html#principalresolver-vs-authenticationhandler
>> 
>> 2.       You need to ensure you are pointing to the correct endpoint for 
>> attributes, whether that is SAML or CAS.
>> 
>>  
>> 
>> If none of that works, change your log levels for org.jasig.cas to DEBUG and 
>> that should tell you the full story.
>> 
>>  
>> 
>> From: [email protected] [mailto:[email protected]] On Behalf Of John 
>> Bruestle
>> Sent: Wednesday, January 6, 2016 12:14 PM
>> To: Misagh Moayyed <[email protected]>
>> Cc: CAS Community <[email protected]>
>> 
>> 
>> Subject: Re: [cas-user] Returning userid in Validation Response
>>  
>> 
>> I wasn't erally expecting to change the username provided, although that 
>> would be OK.  I was just expecting to add an other data item to what the 
>> validation response returnd.
>> 
>>  
>> 
>> Anyway, I tried changing to:
>> 
>>  
>> 
>>   "usernameAttributeProvider" : {
>> 
>>     "@class" : 
>> "org.jasig.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider",
>> 
>>     "usernameAttribute" : "def"
>> 
>>   },
>> 
>>   "attributeReleasePolicy" : {
>> 
>>     "@class" : "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy",
>> 
>>     "allowedAttributes" : [ "java.util.ArrayList", [ "cn", "abc", "def" ] ]
>> 
>>   },
>> 
>>  
>> 
>> And I am still not seeing the test "def" attribute I created in my 
>> Authentication Handler by going:
>> 
>>  
>> 
>>                       final Map<String, Object> attributes = new HashMap<>();
>> 
>>                       attributes.put("abc", "123");
>> 
>>                       attributes.put("def", "456");
>> 
>>  
>> 
>> I do wonder if I am suppose to be defining a different attribute repository. 
>>  Right now my deployerConfigContext.xml contains:
>> 
>>  
>> 
>>     <bean id="attributeRepository" 
>> class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao"
>> 
>>           p:backingMap-ref="attrRepoBackingMap" />
>> 
>>  
>> 
>>     <util:map id="attrRepoBackingMap">
>> 
>>         <entry key="uid" value="uid" />
>> 
>>         <entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
>> 
>>         <entry key="groupMembership" value="groupMembership" />
>> 
>>         <entry>
>> 
>>             <key><value>memberOf</value></key>
>> 
>>             <list>
>> 
>>                 <value>faculty</value>
>> 
>>                 <value>staff</value>
>> 
>>                 <value>org</value>
>> 
>>             </list>
>> 
>>         </entry>
>> 
>>     </util:map>
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>> On Wed, Jan 6, 2016 at 2:01 AM, Misagh Moayyed <[email protected]> wrote:
>> 
>> Because you told your service to use the default CAS behavior when returning 
>> usernames, via: "@class" : 
>> "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider"
>> 
>> You never told it which attribute should be used as the username. It cannot 
>> know that without your direct instructions.
>> 
>>  
>> 
>> If you go back to the original link I sent you, that should help describe 
>> what options are available for providing usernames for registered services. 
>> Pick the one that works on an attribute.
>> 
>>  
>> 
>> From: John Bruestle [mailto:[email protected]] 
>> Sent: Tuesday, January 5, 2016 3:19 PM
>> To: CAS Community <[email protected]>
>> Cc: [email protected]
>> 
>> Subject: Re: [cas-user] Returning userid in Validation Response
>> 
>>  
>> 
>> Thank you for your help.  I think I am getting closer:
>> 
>>  
>> 
>> As a test, I changed the bottom of my AuthenticationHandler to:
>> 
>>  
>> 
>>                       final Map<String, Object> attributes = new HashMap<>();
>> 
>>                       attributes.put("abc", "123");
>> 
>>                       attributes.put("def", "456");
>> 
>>                      
>> 
>>                 return createHandlerResult(credential, 
>> this.principalFactory.createPrincipal(username,attributes), null)
>> 
>>  
>> 
>> And I updated the service definition to:
>> 
>>  
>> 
>> {
>> 
>>   "@class" : "org.jasig.cas.services.RegexRegisteredService",
>> 
>>   "serviceId" : "^http://localhost/bonfire/cas/.*";,
>> 
>>   "name" : "Bonfire Development",
>> 
>>   "id" : 10000017,
>> 
>>   "description" : "Bonfire Development CAS Single Sign-On",
>> 
>>   "proxyPolicy" : {
>> 
>>     "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy"
>> 
>>   },
>> 
>>   "evaluationOrder" : 0,
>> 
>>   "usernameAttributeProvider" : {
>> 
>>     "@class" : 
>> "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider"
>> 
>>   },
>> 
>>   "logoutType" : "BACK_CHANNEL",
>> 
>>   "attributeReleasePolicy" : {
>> 
>>     "@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
>> 
>>   },
>> 
>>   "accessStrategy" : {
>> 
>>     "@class" : 
>> "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy",
>> 
>>     "enabled" : true,
>> 
>>     "ssoEnabled" : true
>> 
>>   }
>> 
>> }
>> 
>>  
>> 
>> Only problem is that I am still just seeing only the the "user" attribute in 
>> the validation response.  Is there something more I need to configure?
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>>  
>> 
>> 
>> 
>> On Tuesday, January 5, 2016 at 1:16:21 PM UTC-5, Misagh Moayyed wrote:
>> 
>> Since you are on 4.1, your authentication handler is able to create the 
>> principal with all the attributes it needs. So, as long as your handler is 
>> stuffing that attribute into the final Principal that is created, you should 
>> be able to dictate to a service that the attribute should be used in the 
>> final response.
>> 
>>  
>> 
>> See this as an example of how LDAP AuthN adds attributes:
>> 
>> https://github.com/Jasig/cas/blob/4.1.x/cas-server-support-ldap/src/main/java/org/jasig/cas/authentication/LdapAuthenticationHandler.java#L196
>> 
>>  
>> 
>> Have yours do the same. You simply need to decide what the attribute name 
>> should be, and stuff it into a map that the principal carries for attributes.
>> 
>>  
>> 
>> This is also relevant:
>> 
>> https://jasig.github.io/cas/4.1.x/installation/Configuring-Principal-Resolution.html#principalresolver-vs-authenticationhandler
>> 
>>  
>> 
>> From: [email protected] [mailto:[email protected]] On Behalf Of John 
>> Bruestle
>> Sent: Tuesday, January 5, 2016 11:11 AM
>> To: CAS Community <[email protected]>
>> Cc: [email protected]
>> Subject: Re: [cas-user] Returning userid in Validation Response
>> 
>>  
>> 
>> Thanks.  Yes, that tells me how to configure the response so it will show 
>> the specific attributes I want, but it doesn't tell me how to create the 
>> attributes.  In my case, I'm getting a userid returned by the store 
>> procedure I'm calling in my AuthenticationHandler, when authenticating.  I'd 
>> like to add code there, at the point that I know the userid, to store 
>> (resolve?) it as an attribute.   How do I do that?
>> 
>>  
>> 
>> 
>> 
>> On Tuesday, January 5, 2016 at 12:28:38 PM UTC-5, Misagh Moayyed wrote:
>> 
>> See if this helps:
>> 
>> https://jasig.github.io/cas/4.1.x/integration/Attribute-Release.html
>> 
>>  
>> 
>> Section “Principal-Id Attribute”.
>> 
>>  
>> 
>> From: [email protected] [mailto:[email protected]] On Behalf Of John 
>> Bruestle
>> Sent: Tuesday, January 5, 2016 9:02 AM
>> To: CAS Community <[email protected]>
>> Subject: [cas-user] Returning userid in Validation Response
>> 
>>  
>> 
>> My system's usernames used for logins are not the same as the unique 
>> userid's used by the database.  In fact, usernames aren't necessarily unique 
>> and sometimes require the password to determine the specific userid.  I need 
>> my validation response to return the userid.
>> 
>>  
>> 
>> I already have a custom AuthenticationHandler, which implements 
>> AbstractJdbcUsernamePasswordAuthenticationHandler, that is correctly 
>> authenticating using a MSSQL stored procedure.  One of the byproducts of 
>> calling the procedure is the userid, so that in the AuthenticationHandler we 
>> do know what the userid is.
>> 
>>  
>> 
>> From my reading, it seems that there may be a way to store the userid away 
>> as an attribute, which could later be used as part of the validation 
>> response.  I'm stuck however trying to figure out how to do this.  I would 
>> appreciate some pointers, especially if they came with the specific XML 
>> files I need to modify and the functions I should call from within my 
>> AuthenticationHandler to store the attribute.
>> 
>>  
>> 
>>  
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
>> 
>> 
>> 
>> 
>>  
>> 
>> --
>> 
>> John Bruestle
>> [email protected]
>> (609) 737-7250
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CAS Community" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
> 
> 
> 
> -- 
> John Bruestle
> [email protected]
> (609) 737-7250
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "CAS Community" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.

-- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.

Reply via email to