At this point, you’re going to have to up the logs to DEBUG and watch what 
happens.



From: [email protected] [mailto:[email protected]] On Behalf Of John 
Bruestle
Sent: Wednesday, January 6, 2016 3:19 PM
To: Dmitriy Kopylenko <[email protected]>
Cc: Misagh Moayyed <[email protected]>; CAS Community 
<[email protected]>
Subject: Re: [cas-user] Returning userid in Validation Response



I do get more back when I call p3/serviceValidate, but cas:user still has 
the username in it.



On Wed, Jan 6, 2016 at 5:12 PM, John Bruestle <[email protected] 
<mailto:[email protected]> > wrote:

Without the use of a client library.



On Wed, Jan 6, 2016 at 5:11 PM, John Bruestle <[email protected] 
<mailto:[email protected]> > wrote:

I'm calling : /serviceValidate



On Wed, Jan 6, 2016 at 4:46 PM, Dmitriy Kopylenko <[email protected] 
<mailto:[email protected]> > wrote:

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] 
<mailto:[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] 
<mailto:[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]> 
[mailto:[email protected] <mailto:[email protected]> ] On Behalf Of John 
Bruestle
Sent: Wednesday, January 6, 2016 12:14 PM
To: Misagh Moayyed <[email protected] <mailto:[email protected]> >
Cc: CAS Community <[email protected] <mailto:[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] 
<mailto:[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] <mailto:[email protected]> ]
Sent: Tuesday, January 5, 2016 3:19 PM
To: CAS Community <[email protected] <mailto:[email protected]> >
Cc: [email protected] <mailto:[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]> 
[mailto:[email protected]] On Behalf Of John Bruestle
Sent: Tuesday, January 5, 2016 11:11 AM
To: CAS Community <[email protected] <mailto:[email protected]> >
Cc: [email protected] <mailto:[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]> 
[mailto:[email protected]] On Behalf Of John Bruestle
Sent: Tuesday, January 5, 2016 9:02 AM
To: CAS Community <[email protected] <mailto:[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] <mailto:[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] <mailto:[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] 
<mailto:[email protected]> .
Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.







-- 

John Bruestle
[email protected] <mailto:[email protected]>
(609) 737-7250 <tel:%28609%29%20737-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] 
<mailto:[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] 
<mailto:[email protected]> .
Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.







-- 

John Bruestle
[email protected] <mailto:[email protected]>
(609) 737-7250 <tel:%28609%29%20737-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] 
<mailto:[email protected]> .
Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.







-- 

John Bruestle
[email protected] <mailto:[email protected]>
(609) 737-7250 <tel:%28609%29%20737-7250>







-- 

John Bruestle
[email protected] <mailto:[email protected]>
(609) 737-7250 <tel:%28609%29%20737-7250>







-- 

John Bruestle
[email protected] <mailto:[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] 
<mailto:[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