2013-11-28 101 views
0

我現在已經在與CAS結合使用LDAP時遇到了一些問題。我想爲多個應用程序實現SSO解決方案。到目前爲止,身份驗證很有效我們希望根據在LDAP中配置的角色授權用戶。問題是CAS不提供用戶角色。從CAS獲取LDAP用戶屬性

我現在到目前爲止我知道需要配置deployerConfigContext.xml。我還發現了各種教程,大多數都是使用CAS的錯誤版本,或者不按我想要的做。

我們的用戶位於cn=admin,cn=users,dc=manager,dc=local,團隊居住在cn=admins,ou=groups,dc=manager,dc=local。中科院版本3.5.2是

我已經試過insertig是這樣的:

<bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao"> 
    <property name="backingMap"> 
     <map> 
      <entry key="uid" value="uid" /> 
      <entry key="eduPersonAffiliation" value="eduPersonAffiliation" /> 
      <entry key="groupMembership" value="groupMembership" /> 
     </map> 
    </property> 
    <property name="query" value="(uid={0})" /> 
    <property name="contextSource" ref="contextSource" /> 
    <property name="ldapAttributesToPortalAttributes"> 
     <map> 
      <entry key="cn" value="Name" /> 
      <entry key="home" value="homeDirectory" /> 
     </map> 
    </property> 
</bean> 

CAS告訴我說,他不喜歡的屬性querycontextSourceldapAttributesToPortalAttributes。我想獲取「簡單」屬性homeDirectory。

您能給我任何人提示如何配置該邪惡的XML文件?如果你願意,我也可以提供完整的xml文件。

UPDATE

一些擺弄後,我試圖配置attributeRepository在該網站:在章Populate Principal's attributes with LDAP repositoryhttps://wiki.jasig.org/display/CASUM/Attributes。其結果是,CAS沒有啓動,而是給我的消息

Bean property 'ldapAttributesToPortalAttributes' is not writable or has an invalid setter method. 

attributeRepository看起來是這樣的:

<bean id="attributeRepository" class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao"> 
    <property name="ldapAttributesToPortalAttributes"> 
     <map> 
      <entry key="cn" value="Name" /> 
      <entry key="home" value="homeDirectory" /> 
     </map> 
    </property> 
</bean> 

回答

3

我有以下豆

<bean id="attributeRepository" 
    class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao"> 
    <property name="baseDN" value="ou=groups,dc=manager,dc=local"/>  
    <property name="contextSource" ref="contextSource" /> 
    <property name="requireAllQueryAttributes" value="true"/> 
    <property name="queryAttributeMapping"> 
     <map> 
      <entry key="username" value="sAMAccountName" /> 
     </map> 
    </property>  
    <property name="resultAttributeMapping"> 
     <map>    
      <entry key="displayName" value="cn" /> 
     </map> 
    </property> 
</bean> 

你在哪裏映射displayName屬性爲cn。下面的行在你的deployerConfigContext.xml中,你會發現allowedAttributes,如果它不存在,你可以添加。使用這個你會在會話中加載這些信息。

<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>cn</value> 
         </list> 
        </property> 
       </bean>      
      </list> 
     </property> 
    </bean> 

爲了返回從CAS那些值修改casServiceValidationSuccess.jsp(位於WEB-INF /視圖/ JSP /協議/ 2.0)

<cas:attributes> 
<c:forEach var="auth" items="${assertion.chainedAuthentications}"> 
<c:forEach var="attr" items="${auth.principal.attributes}" > 
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}  </cas:${fn:escapeXml(attr.key)}> 
</c:forEach> 
</c:forEach> 
</cas:attributes> 
+0

我比較了我在deployerContext設置豆。 xml並將缺少的屬性「allowedAttributes」添加到serviceRegistryDao。現在我可以打開CAS「管理服務」頁面,並在我的應用程序中分配我需要的屬性。這樣可行。有沒有辦法通過配置文件來完成這項任務? – DaSilva2010

+0

如果要從ldap返回更多值,請在此屬性中添加更多條目** resultAttributeMapping **在** attributeRepository ** bean中並放入別名。這些別名必須映射到** serviceRegistryDao ** bean的** allowedAttributes **中 –

+0

我更改了serviceRegistryDao以使用數據庫進行配置存儲。看到這裏:https://wiki.jasig.org/display/CASUM/Configuring – DaSilva2010