Jasig CAS 3.6 - невозможно добавить атрибуты в ответ аутентификации

Аутентификация работает нормально, и с идентификатором билета я также получаю имя пользователя со стороны клиента. Для получения параметров я использую следующий скрипт ниже. Я пробовал несколько разных способов, но безуспешно. Я всегда получаю имя пользователя и все. Любые идеи? Как я могу добавить новые параметры? Есть примеры с загрузкой данных из SQL и LDAP и добавлением их в список атрибутов, но ни один из них не работает. Так что, вероятно, что-то с моей первоначальной настройкой. Информация, которую я хочу добавить, поступает не из БД или LDAP, я хочу добавить полностью пользовательскую информацию, которую я получаю с аутентификацией (используемый канал пересылает ее). Так что это должны быть добавлены пользовательские атрибуты или что-то в этом роде. Исходный код приведен ниже -> не пытаюсь добавить туда атрибуты, просто чистый код, который просто аутентифицирует.

Вся конфигурация ниже. Я, наверное, что-то совсем упускаю... Так что, если у вас есть идеи или примеры, как добавить в ответное сообщение saml дополнительные параметры для сервисного клиента, буду премного благодарен :)

protected UserDetails loadUserDetails(Assertion assertion) {
    ArrayList grantedAuthorities = new ArrayList();
    String[] arr$ = this.attributes;
    int len$ = arr$.length;

    for(int i$ = 0; i$ < len$; ++i$) {
        String attribute = arr$[i$];
        Object value = assertion.getPrincipal().getAttributes().get(attribute);
        if(value != null) {
            if(value instanceof List) {
                List list = (List)value;
                Iterator i$1 = list.iterator();

                while(i$1.hasNext()) {
                    Object o = i$1.next();
                    grantedAuthorities.add(new SimpleGrantedAuthority(this.convertToUpperCase?o.toString().toUpperCase():o.toString()));
                }
            } else {
                grantedAuthorities.add(new SimpleGrantedAuthority(this.convertToUpperCase?value.toString().toUpperCase():value.toString()));
            }
        }
    }

    return new User(assertion.getPrincipal().getName(), "NO_PASSWORD", true, true, true, true, grantedAuthorities);
}

развертываниеКонтекстКонтекст.xml:

<?xml version="1.0" encoding="UTF-8"?>
 ...
<bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao"/>

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

    <property name="credentialsToPrincipalResolvers">
        <list>
            <bean id="adPrincipalResolver" class="ee.qubova.cas.security.ad.ADPrincipalResolver">
                <property name="attributeRepository" ref="attributeRepository"/>
            </bean>
        </list>
    </property>
    <property name="authenticationHandlers">
        <list>
            <bean class="ee.qubova.cas.security.CustomAuthenticationHandler">
            </bean>
        </list>
    </property>
</bean>


<sec:user-service id="userDetailsService">
    <sec:user name="test" password="test" authorities="ROLE_ADMIN"/>
</sec:user-service>


<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
    <property name="registeredServices">
        <list>
            <bean class="org.jasig.cas.services.RegisteredServiceImpl">
                <property name="id" value="0"/>
                <property name="name" value="HTTP"/>
                <property name="description" value="Only Allows HTTP Urls"/>
                <property name="serviceId" value="http://**"/>
                <property name="evaluationOrder" value="10000001"/>
                <property name="allowedAttributes">
                    <list>
                        <value>username</value>
                        <value>password</value>
                        <value>idCode</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>

<bean id="utils" class="ee.qubova.cas.utils.Utils">
    <property name="trustedIssuerDnPattern" value=".*"/>
</bean>

<bean id="idCardLoginController" class="ee.qubova.cas.security.idcard.X509Controller">
    <property name="centralAuthenticationService" ref="centralAuthenticationService"/>
    <property name="cookieGenerator" ref="ticketGrantingTicketCookieGenerator"/>
    <property name="argumentExtractors" ref="argumentExtractors"/>
    <property name="utils" ref="utils"/>
</bean>

<bean id="adLoginController" class="ee.qubova.cas.security.ad.ADLoginController">
    <property name="centralAuthenticationService" ref="centralAuthenticationService"/>
    <property name="cookieGenerator" ref="ticketGrantingTicketCookieGenerator"/>
    <property name="argumentExtractors" ref="argumentExtractors"/>
    <property name="utils" ref="utils"/>
</bean>

public class ADPrincipalResolver extends AbstractPersonDirectoryCredentialsToPrincipalResolver  {
protected String extractPrincipalId(final Credentials credentials) {
    final ADCredentials adCredentials = (ADCredentials) credentials;
    return adCredentials.getIdCode();
}

public boolean supports(final Credentials credentials) {
    return credentials != null && ADCredentials.class.isAssignableFrom(credentials.getClass());
}

}

public class ADCredentials extends AbstractCASUserProfile  {
private String username;
private String password;

public ADCredentials(String idCode, String username, String password) {
    super.setIdCode(idCode);
    this.username = username;
    this.password = password;
}


public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

public class CustomAuthenticationHandler implements AuthenticationHandler {

public boolean authenticate(Credentials credentials) throws AuthenticationException {
    if (credentials == null) {
        return false;
    }

    if (credentials instanceof ADCredentials) {
        ADCredentials c = (ADCredentials) credentials;
        if (StringUtils.hasLength(c.getIdCode())) {
            return true;
        }
    } 
    return false;
}

public boolean supports(Credentials credentials) {
    return credentials != null
            && credentials instanceof ADCredentials;
}

}

И в cas-servlet.xml

  <bean
  id="handlerMappingC"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
  <props>
    <prop key="/adlogin">adLoginController</prop>

person Priit Serk    schedule 07.04.2016    source источник


Ответы (1)


CAS3 не освобождает атрибуты по умолчанию. Это делается только через samlValidate. Если вы используете serviceValidate, вам нужно будет изменить файл JSP, который создает окончательный ответ CAS, и вручную добавить в него атрибуты. См. https://wiki.jasig.org/display/casum/attributes.

Обратите внимание, что CAS3 — это EOL. Будущие версии CAS делают это автоматически.

person Misagh Moayyed    schedule 09.04.2016