2016-04-01 16 views
1

Ich implementiere ein Authentifizierungssystem für eine Tomcat-Webanwendung, die mit CAS unter Verwendung von ADFS authentifiziert wird. Ich verwende Unicons CAS server with ADFS integration.CAS-Attribute in Wsfederation werden nicht an CAS-Client weitergeleitet

Ich habe den Status erreicht, wo ich sehen kann, dass die erforderlichen Attribute den CAS-Server erreichen. Diese Attribute werden jedoch nicht an den Client weitergeleitet. Überprüfen Sie die folgende Abbildung: enter image description here

Im obigen Bild ist die Attributzuordnung nach der Authentifizierung leer. Wenn die Clientanwendung das Ticket validiert, ist die Attributzuordnung ebenfalls leer. Ref Bild unten:

enter image description here

Nach authentifiziert zu werden, sind die Attribute, die in den Protokollen sichtbar, aber sie werden nicht in Attribute Karte geladen.

Die deployerConfigContext.xml ist wie folgt. Die attributeRepository-Bean und die Eigenschaft erlaubte Attribute in serviceRegistryDao-Bean sind wahrscheinlich die Hauptschwerpunkte.

<?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:tx="http://www.springframework.org/schema/tx" 
     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.1.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
     http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <bean id="authenticationManager" 
     class="org.jasig.cas.authentication.AuthenticationManagerImpl"> 

     <property name="authenticationMetaDataPopulators"> 
      <list> 
       <bean class="net.unicon.cas.support.wsfederation.authentication.WsFederationAuthenticationMetaDataPopulator" /> 
      </list> 
     </property> 
     <property name="credentialsToPrincipalResolvers"> 
      <list> 
      <bean class="net.unicon.cas.support.wsfederation.authentication.principal.WsFederationCredentialsToPrincipalResolver"> 
       <property name="configuration" ref="wsFedConfig" /> 
      </bean> 
      <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" > 
       <property name="attributeRepository" ref="attributeRepository" /> 
      </bean> 
      <bean  class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" /> 
      </list>   
     </property> 

     <property name="authenticationHandlers"> 
      <list> 
      <bean class="net.unicon.cas.support.wsfederation.authentication.handler.support.WsFederationAuthenticationHandler" /> 
      <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" 
       p:httpClient-ref="httpClient" /> 
      </list> 
     </property> 
    </bean> 

    <sec:user-service id="userDetailsService"> 
     <sec:user name="@@THIS SHOULD BE [email protected]@" password="notused" authorities="ROLE_ADMIN" /> 
    </sec:user-service> 

    <bean id="attributeRepository" 
     class="org.jasig.services.persondir.support.StubPersonAttributeDao"> 
     <property name="backingMap"> 
      <map> 
       <entry key="emailaddress" value="upn" /> 
       <!--<entry key="FirstName" value="username" />--> 
       <entry key="name" value="LastName" /> 
       <entry key="costcent" value="costcent" /> 
       <entry key="title" value="FirstName" /> 
      </map> 
     </property> 
    </bean> 

    <bean 
     id="serviceRegistryDao" 
     class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl"> 
      <property name="registeredServices"> 
       <list> 
        <bean class="org.jasig.cas.services.RegexRegisteredService"> 
         <property name="id" value="0" /> 
         <property name="name" value="HTTP and IMAP" /> 
         <property name="description" value="Allows HTTP(S) and IMAP(S) protocols" /> 
         <property name="serviceId" value="^(https?|imaps?)://.*" /> 
         <property name="evaluationOrder" value="10000001" /> 
         <property name="allowedAttributes"> 
         <list> 
      <value>upn</value> 
      <value>Department</value> 
      <value>costcent</value> 
      <value>LastName</value> 
      <value>FirstName</value> 
      <value>name</value> 
      <value>emailaddress</value> 
      <value>title</value> 
      <value>SAM-Account-Name</value> 

         </list> 
        </property> 
        </bean> 

       </list> 
      </property> 
     </bean> 

    <bean id="auditTrailManager" class="com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager" /> 

    <bean id="healthCheckMonitor" class="org.jasig.cas.monitor.HealthCheckMonitor"> 
    <property name="monitors"> 
     <list> 
     <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" /> 
     </list> 
    </property> 
    </bean> 
</beans> 

Der Rest des bei CAS-Server ist das gleiche wie in der Beispielimplementierung von unicon der CAS-Server-Implementierung here

ich viele Kombinationen in den genannten Bohnen versucht habe. Da ich neu bei Spring bin, konnte ich nicht verstehen, wie ich die Anmeldeinformationen in attributeMap laden soll. Bitte leiten Sie mich bei der Weiterleitung der vom CAS-Server während der Authentifizierung an die Client-Anwendung gesendeten Attribute.

Antwort

1

Es sieht so aus, als ob der WsFederationCredentialsToPrincipalResolver nur die Prinzipal-ID aus der Sammlung der empfangenen Attribute extrahiert und andere Attribute ignoriert. Sie erhalten also nur das Identitätsattribut, das in Ihrer Konfiguration definiert ist. Sie könnten diesen Resolver vorerst mit Ihrem Attribut-Repository verbinden und Attribute von dort abrufen und abrufen.

Beachten Sie, dass CAS 4.2 dieses Verhalten unterstützt und behebt und integrierte Unterstützung für die ADFS-Integration bietet. Ihre andere Option wäre, WsFederationCredentialsToPrincipalResolver zu erweitern und Attribute verarbeiten zu lassen und sie in den endgültigen Principal einzufügen, der dort durch Überschreiben der entsprechenden Methode erstellt wird.

+0

Können Sie nur ein wenig mehr darüber erklären, wie Sie Resolver mit dem Attribut-Repository verbinden und es konsumieren? –

+1

Ihre beste Anleitung wäre, den cas 4.2 Quellcode zu durchsuchen und Ihre Erweiterung entsprechend neu zu konfigurieren. Abgesehen davon, stecken Sie das Attribut-Repository im Wesentlichen in den Wsfed-Resolver ein: '' –

+0

Der Vorschlag zur Verwendung von CAS 4.2 funktionierte wie ein Juwel. Es gibt einige zusätzliche Konfigurationen, die als Teil der Verwendung von CAS 4.x durchgeführt werden müssen. Es lohnt sich immer noch. –

Verwandte Themen