Перенос конфигураций LDAP из Websphere в Liberty - PullRequest
0 голосов
/ 13 апреля 2020

Я начинаю с нового приложения maven web jsf для локальной разработки. У меня уже есть правильно настроенный сервер приложений Websphere 8.5 с правильной конфигурацией для использования ldap. В новом проекте будет использоваться Liberty вместо традиционной Websphere.

Я настроил то, что мне нужно, на сервере Liberty. xml и в веб-приложении. xml

Сервер Liberty. xml :

<ldapRegistry
id="ldap"
realm="LdapRegistry"
ldapType="Microsoft Active Directory"
host="host-copy-pasted-from-websphere-configuration"
port="port-copy-pasted-from-websphere-configuration"
baseDN="baseDN-copy-pasted-from-websphere-configuration"
searchTimeout="120"
reuseConnection="true"
ignoreCase="true"
bindDN="bindDN-copy-pasted-from-websphere-configuration"
bindPassword="bindDN-known-password"
sslEnabled="false">
<activedFilters
    userFilter="userFilter-copy-pasted-from-websphere-configuration"
    groupFilter="groupFilter-copy-pasted-from-websphere-configuration"
    groupIdMap="groupIdMap-copy-pasted-from-websphere-configuration"
    userIdMap="userIdMap-copy-pasted-from-websphere-configuration"
    groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember"
    >
</activedFilters>

веб-приложения. xml (большая часть конфигурации скопирована из старых других приложений):

<security-role>
    <role-name>AllAuthenticated</role-name>
</security-role>
<security-constraint>
    <display-name>AllAuthenticated</display-name>
    <web-resource-collection>
        <web-resource-name>AllAuthenticated</web-resource-name>
        <url-pattern>/pages/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>PUT</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>AllAuthenticated</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>LdapRegistry</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/error.xhtml</form-error-page>
    </form-login-config>
</login-config>

my login.x html:

    ...
<form id="login-form" action="j_security_check" class="shadow mx-auto" method="post">
    ...
    <input type="text" id="j_username" name="j_username" class="form-control form-control-lg" required="required" autofocus="autofocus" />
    ...
    <input type="password" id="j_password" name="j_password" class="form-control" required="required" />
    ...

ibm-application-bnd. xml:

<application-bnd ...>
<security-role name="AllAuthenticated">
    <special-subject type="ALL_AUTHENTICATED_USERS" />
</security-role>

Полагаю, это не так уж и плохо от хорошего конфига, потому что когда я захожу с плохим пароль Я получаю консольное сообщение " Убедитесь, что имя участника и пароль указаны правильно. Убедитесь, что учетная запись не заблокирована и учетная запись включена. "

Когда я набираю правильный пароль, сообщение об ошибке не отображается, сообщение не отображается, в любом случае я перенаправлен на страницу error.x html, и если я пытаюсь перейти на страницу приложения, я перенаправлен на login.x html

Будь терпелив, пожалуйста, я работаю на java всего несколько месяцев ... * 10 27 *

Что я могу попробовать? Так как у меня нет сообщения об ошибке для расследования ...

EDIT

Используя инструкции @J Van Hill, я добавил трассировку на сервер. xml. Я обнаружил, что когда я использую правильный пароль, я отслеживаю эту запись:

[controls={com.ibm.wsspi.security.wim.model.LoginControl=
[countLimit=4501
returnSubType=true
searchLimit=0
timeLimit=0
]}
entities={com.ibm.wsspi.security.wim.model.LoginAccount=
[password=****
principalName=my-username
]}
validated=false
]

и после нескольких строк эту запись:

[entities={com.ibm.wsspi.security.wim.model.Entity=
[IdentifierType= {
    externalName=cn=my-username,ou=my-ou,o=my-o,c=my-c
    repositoryId=com.ibm.ws.security.registry.ldap.config[ldap]
    uniqueName=cn==my-username,ou=my-ou,o=my-o,c=my-c
}
]}
validated=false
]

Я занимаюсь исследованием ролей безопасности. .. Любая другая точка зрения приветствуется.

РЕДАКТИРОВАТЬ 2

Я анализирую лучше след. После некоторых строк вышеупомянутых записей есть записи об ошибках:

[13/04/20 19.39.59:317 CEST] 00000079 id=00000000 com.ibm.ws.security.registry.RegistryException               > <init> Entry  
                                                                                                                   null
                                                                                                                   java.lang.NullPointerException
        at com.ibm.ws.security.wim.adapter.ldap.LdapHelper.getOctetString(LdapHelper.java:66)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager.getExtIdFromAttributes(LdapConfigManager.java:2841)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:815)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:761)
        at com.ibm.ws.security.wim.adapter.ldap.LdapAdapter.get(LdapAdapter.java:342)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)
        at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

    [13/04/20 19.39.59:318 CEST] 00000079 id=0e8ce458 com.ibm.ws.security.registry.RegistryException               < <init> Exit  
                                                                                                                   com.ibm.ws.security.registry.RegistryException
        at com.ibm.ws.security.wim.registry.WIMUserRegistry.getUserSecurityName(WIMUserRegistry.java:296)
        at com.ibm.ws.security.authentication.internal.jaas.modules.ServerCommonLoginModule.getSecurityName(ServerCommonLoginModule.java:113)
        at com.ibm.ws.security.authentication.jaas.modules.UsernameAndPasswordLoginModule.login(UsernameAndPasswordLoginModule.java:77)
        at com.ibm.ws.kernel.boot.security.LoginModuleProxy.login(LoginModuleProxy.java:51)
        at sun.reflect.GeneratedMethodAccessor1372.invoke(Unknown Source)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)
        at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.NullPointerException
        at com.ibm.ws.security.wim.adapter.ldap.LdapHelper.getOctetString(LdapHelper.java:66)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager.getExtIdFromAttributes(LdapConfigManager.java:2841)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:815)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:761)
        at com.ibm.ws.security.wim.adapter.ldap.LdapAdapter.get(LdapAdapter.java:342)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.security.wim.ProfileManager.genericProfileManagerMethod(ProfileManager.java:263)
        at com.ibm.ws.security.wim.ProfileManager.get(ProfileManager.java:207)
        at com.ibm.ws.security.wim.VMMService.get(VMMService.java:208)
        at com.ibm.ws.security.wim.registry.util.SecurityNameBridge.getUserSecurityName(SecurityNameBridge.java:182)
        at com.ibm.ws.security.wim.registry.WIMUserRegistry.getUserSecurityName(WIMUserRegistry.java:291)
        ... 49 more

    [13/04/20 19.39.59:344 CEST] 00000079 id=00000000 com.ibm.ws.logging.internal.impl.IncidentImpl                I FFDC1015I: Ƞstato creato un incidente FFDC: "com.ibm.ws.security.registry.RegistryException com.ibm.ws.security.authentication.jaas.modules.UsernameAndPasswordLoginModule 107" in ffdc_20.04.13_19.39.59.0.log
    [13/04/20 19.39.59:402 CEST] 00000079 id=00000000 com.ibm.ws.security.authentication.AuthenticationException   > <init> Entry  
                                                                                                                   null
                                                                                                                   com.ibm.ws.security.registry.RegistryException
        at com.ibm.ws.security.wim.registry.WIMUserRegistry.getUserSecurityName(WIMUserRegistry.java:296)
        at com.ibm.ws.security.authentication.internal.jaas.modules.ServerCommonLoginModule.getSecurityName(ServerCommonLoginModule.java:113)
        at com.ibm.ws.security.authentication.jaas.modules.UsernameAndPasswordLoginModule.login(UsernameAndPasswordLoginModule.java:77)
        at com.ibm.ws.kernel.boot.security.LoginModuleProxy.login(LoginModuleProxy.java:51)
        at sun.reflect.GeneratedMethodAccessor1372.invoke(Unknown Source)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)
        at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.NullPointerException
        at com.ibm.ws.security.wim.adapter.ldap.LdapHelper.getOctetString(LdapHelper.java:66)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager.getExtIdFromAttributes(LdapConfigManager.java:2841)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:815)
        at com.ibm.ws.security.wim.adapter.ldap.LdapConnection.getEntityByIdentifier(LdapConnection.java:761)
        at com.ibm.ws.security.wim.adapter.ldap.LdapAdapter.get(LdapAdapter.java:342)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.security.wim.ProfileManager.genericProfileManagerMethod(ProfileManager.java:263)
        at com.ibm.ws.security.wim.ProfileManager.get(ProfileManager.java:207)
        at com.ibm.ws.security.wim.VMMService.get(VMMService.java:208)
        at com.ibm.ws.security.wim.registry.util.SecurityNameBridge.getUserSecurityName(SecurityNameBridge.java:182)
        at com.ibm.ws.security.wim.registry.WIMUserRegistry.getUserSecurityName(WIMUserRegistry.java:291)
        ... 49 more

    [13/04/20 19.39.59:403 CEST] 00000079 id=5177825f com.ibm.ws.security.authentication.AuthenticationException   < <init> Exit  
                                                                                                                   com.ibm.ws.security.authentication.AuthenticationException
        at com.ibm.ws.security.authentication.jaas.modules.UsernameAndPasswordLoginModule.login(UsernameAndPasswordLoginModule.java:109)
        at com.ibm.ws.kernel.boot.security.LoginModuleProxy.login(LoginModuleProxy.java:51)
        at sun.reflect.GeneratedMethodAccessor1372.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
        .....
        .....
        .....
        .....
        .....
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)
        at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

РЕДАКТИРОВАТЬ 3

Некоторая дополнительная информация из журнала трассировки (мне пришлось вырезать часть из журнала предыдущего редактирования потому что сообщение может быть не более 30000 символов).

В соответствии с запросом здесь представлены записи JNDI_CALL в трассировке после входа в систему с правильным паролем перед NPE.

...
...
...
[14/04/20 9.16.57:291 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.LdapHelper              < printSearchControls Exit  
                                                                                                               [searchScope: 2, timeLimit: 120, countLimit: 4501, returningObjFlag: false, returningAttributes: [objectguid, objectClass, cn, principalname]]
[14/04/20 9.16.57:291 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL search(Name,String,SearchControls) [ldap://XXXXXXXXXXXXX:XXX] 
                                                                                                               o=MY-O,c=,MY-C
                                                                                                               (&(cn=MY-USERNAME)(objectclass=inetOrgPerson))
                                                                                                               [searchScope: 2, timeLimit: 120, countLimit: 4501, returningObjFlag: false, returningAttributes: [objectguid, objectClass, cn, principalname]]
[14/04/20 9.16.57:305 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL search(Name,String,SearchControls) [14 ms] 
                                                                                                               com.sun.jndi.ldap.LdapSearchEnumeration@20e0d246
[14/04/20 9.16.57:305 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.LdapConnection          3 search(String, String, Object[], SearchControls) Received search results, looping through elements. May include referral chasing.
[14/04/20 9.16.57:306 CEST] 00000083 id=3a9c8114 com.ibm.ws.security.wim.adapter.ldap.LdapConnection          > supportRangeAttributes Entry  
                                                                                                               {objectclass=objectClass: top, person, organizationalPerson, inetOrgPerson, XXXXXOrgPerson, mdfPerson, cn=cn: MY-USERNAME}
                                                                                                               o=MY-O,c=,MY-C
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@4d39fb26{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848567, iPoolTimeStampSeconds=1586848567}
[14/04/20 9.16.57:307 CEST] 00000083 id=3a9c8114 com.ibm.ws.security.wim.adapter.ldap.LdapConnection          < supportRangeAttributes Exit 
[14/04/20 9.16.57:307 CEST] 00000083 id=427f3b80 com.ibm.ws.security.wim.adapter.ldap.CachedNamingEnumeration > add Entry  
                                                                                                               cn=MY-USERNAME,ou=MY-OU: null:null:{objectclass=objectClass: top, person, organizationalPerson, inetOrgPerson, XXXXXOrgPerson, mdfPerson, cn=cn: MY-USERNAME}
[14/04/20 9.16.57:307 CEST] 00000083 id=427f3b80 com.ibm.ws.security.wim.adapter.ldap.CachedNamingEnumeration < add Exit 
[14/04/20 9.16.57:307 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.LdapConnection          3 search(String, String, Object[], SearchControls) Received search results, looped through elements. Num of elements retrieved: 1
[14/04/20 9.16.57:307 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL getResponseControls() [ldap://XXXXXXXXXXXXX:XXX]
[14/04/20 9.16.57:307 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL getResponseControls() [0 ms]
[14/04/20 9.16.57:307 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL setRequestControls(Control[]) [ldap://XXXXXXXXXXXXX:XXX]
[14/04/20 9.16.57:307 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL setRequestControls(Control[]) [0 ms]
[14/04/20 9.16.57:307 CEST] 00000083 id=645bfd15 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  > releaseDirContext Entry  
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@4d39fb26{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848567, iPoolTimeStampSeconds=1586848567}
...
...
...
[14/04/20 9.16.57:376 CEST] 00000083 id=645bfd15 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  < createDirContext Exit  
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@34fc1054{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848617, iPoolTimeStampSeconds=1586848617}
[14/04/20 9.16.57:376 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL close() [ldap://XXXXXXXXXXXXX:XXX]
[14/04/20 9.16.57:376 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL close() [0 ms]
[14/04/20 9.16.57:376 CEST] 00000083 id=5a992031 com.ibm.ws.security.wim.adapter.ldap.LdapAdapter             < authenticateWithPassword Exit 
...
...
...
[14/04/20 9.16.57:618 CEST] 00000083 id=645bfd15 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  > checkPrimaryServer Entry  
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@4d39fb26{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848567, iPoolTimeStampSeconds=1586848567}
                                                                                                               ldap://XXXXXXXXXXXXX:XXX
                                                                                                               1586848618
[14/04/20 9.16.57:618 CEST] 00000083 id=645bfd15 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  < checkPrimaryServer Exit  
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@4d39fb26{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848567, iPoolTimeStampSeconds=1586848567}
[14/04/20 9.16.57:618 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  3 getDirContext ContextPool: total=1, poolSize=0, currentTime=1586848618, createTime=1586848567
[14/04/20 9.16.57:618 CEST] 00000083 id=645bfd15 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  < getDirContext Exit  
                                                                                                               com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext@4d39fb26{iProviderURL=ldap://XXXXXXXXXXXXX:XXX, iCreateTimestampSeconds=1586848567, iPoolTimeStampSeconds=1586848567}
[14/04/20 9.16.57:618 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL search(String,String,SearchControls) [ldap://XXXXXXXXXXXXX:XXX] 
                                                                                                               cn=MY-USERNAME,ou=MY-OU,o=MY-O,c=MY-C
                                                                                                               objectclass=*
                                                                                                               javax.naming.directory.SearchControls@562c6943
[14/04/20 9.16.57:621 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext 3 JNDI_CALL search(String,String,SearchControls) [3 ms] 
                                                                                                               com.sun.jndi.ldap.LdapSearchEnumeration@61d24608
[14/04/20 9.16.57:621 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.LdapHelper              > prepareDN Entry  
                                                                                                               cn=-MY-USERNAME,ou=MY-OU,o=MY-O,c=MY-C
                                                                                                               null
[14/04/20 9.16.57:621 CEST] 00000083 id=00000000 com.ibm.ws.security.wim.adapter.ldap.LdapHelper              > unescapeDoubleBackslash Entry  
                                                                                                               cn=MY-USERNAME,ou=MY-OU,o=MY-O,c=MY-C
...
...
...

И это метод getExtIdFromAttributes в LdapConfigManager. ..) непосредственно перед NPE

...
...
...
[14/04/20 9.16.57:647 CEST] 00000083 id=3a9c8114 com.ibm.ws.security.wim.adapter.ldap.LdapConnection          < getUniqueName Exit  
                                                                                                               cn=MY-USERNAME,ou=MY-USERNAME,o=MY-O,c=MY-C
                                                                                                               [14/04/20 9.16.57:647 CEST] 00000083 id=6bbc56a3 com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager       > getExtIdFromAttributes Entry  
                                                                                                               cn=MY-USERNAME,ou=MY-USERNAME,o=MY-O,c=MY-C
                                                                                                               Entity
                                                                                                               {objectguid=objectguid: null, objectclass=objectClass: top, person, organizationalPerson, inetOrgPerson, XXXXXOrgPerson, mdfPerson, principalname=principalname: null}
[14/04/20 9.16.57:647 CEST] 00000083 id=6bbc56a3 com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager       > getExtId Entry  
                                                                                                               Entity
[14/04/20 9.16.57:647 CEST] 00000083 id=6bbc56a3 com.ibm.ws.security.wim.adapter.ldap.LdapConfigManager       > getLdapEntity Entry  
                                                                                                               Entity
[14/04/20 9.16.57:647 CEST] 00000083 id=00000000 com.ibm.wsspi.security.wim.model.Entity                      > getSubEntityTypes Entry  
                                                                                                               Entity
...
...
...

Я очень новичок в этом деле, я заметил некоторые другие конфигурации в оригинальной Websphere, которые я не устанавливал в Liberty. Я не знаю, правильно ли я поступаю

1. В Websphere у меня есть запись Global Security -> JAAS - J2 C Данные аутентификации, поэтому я добавил на сервере. xml в ветви futureManager:

<feature>jdbc-4.2</feature>

, а затем добавил эту запись authData:

<authData id="MY-IDENTIFICATION" user="MY-DB-USER" password="MY-DB-PASSWORD"/>

затем в ibm-application-bnd. xml добавлено

   <resource-ref name="jdbc/MY-JDBC" binding-name="jdbc/MY-JDBC">
     <authentication-alias name="MY-IDENTIFICATION"/>
   </resource-ref>

Эта попытка не дала результата.

(Примечание: jdb c уже правильно настроен на сервере. xml, так как без аутентификации веб-приложение может получить доступ к БД с помощью mybatis)

2. Существуют также конфигурации для того, что называется «Федеративные репозитории», я пытаюсь построить узел на сервере. xml, но у меня есть некоторые трудности. Это обязательно и может быть причиной?

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Предполагая, что ваш пользователь является пользователем LDAP, вы, вероятно, должны определить, проходит ли ваш пользователь сначала аутентификацию с помощью LDAP. Поведение, которое вы видите, заставляет меня верить, что это так, но это хорошо, чтобы проверить. При стандартных настройках трассировки, если нет «реальной» ошибки, мы не выводим ошибки аутентификации в журнал сообщений.

Чтобы отладить это, включите трассировку для безопасности, добавив на свой сервер следующее: xml файл (если он уже существует, добавьте в него трассировку spe c ниже):

<logging traceSpecification="*=info:com.ibm.ws.security.*=all:com.ibm.websphere.security.*=all:com.ibm.wsspi.security.*=all" />

Перезапустите сценарий, и вы увидите один или несколько файлов трассировки * .log. Поиск в этих файлах трассировки для вызова LdapAdapter.login (...), он должен выглядеть следующим образом (примечание: PrincipalName = должен быть пользователем, с которым вы аутентифицируетесь):

[4/13/20, 9:53:31:884 CDT] 0000003c id=9c608b7f com.ibm.ws.security.wim.adapter.ldap.LdapAdapter             > login Entry  
                                                                                                                com.ibm.wsspi.security.wim.model.Root=
[contexts={com.ibm.wsspi.security.wim.model.Context=
[key=realm
value=ADRealm
],com.ibm.wsspi.security.wim.model.Context=
[key=allowOperationIfReposDown
value=false
]}
controls={com.ibm.wsspi.security.wim.model.LoginControl=
[countLimit=0
properties={principalName}
returnSubType=true
searchBases={cn=users,dc=secfvt2,dc=austin,dc=ibm,dc=com}
searchLimit=0
timeLimit=0
]}
entities={com.ibm.wsspi.security.wim.model.LoginAccount=
[password=****
principalName=vmmtestuser
]}
validated=false
]

Как правило, на этом этапе Я ищу с этой позиции «логин». Успешный вход в систему содержит объект со свойствами для вашего пользователя и выглядит следующим образом:

[4/13/20, 9:53:31:911 CDT] 0000003c id=9c608b7f com.ibm.ws.security.wim.adapter.ldap.LdapAdapter             < login Exit  
                                                                                                               com.ibm.wsspi.security.wim.model.Root=
[entities={com.ibm.wsspi.security.wim.model.PersonAccount=
    cn=vmmtestuser
    dentifierType= {
    externalId=d577025f9f80f7cef25c99b722a68714
    externalName=cn=vmmtestuser,cn=users,dc=secfvt2,dc=austin,dc=ibm,dc=com
    repositoryId=com.ibm.ws.security.registry.ldap.config[LDAP]
    uniqueName=cn=vmmtestuser,cn=users,dc=secfvt2,dc=austin,dc=ibm,dc=com

    assword=****
    rincipalName=vmmtestuser
    }
validated=false
]

Неудачный вход в систему может выглядеть примерно так (код ошибки 49 - неверные учетные данные):

[4/13/20, 9:53:33:084 CDT] 0000003f id=00000000 com.ibm.ws.security.wim.adapter.ldap.context.ContextManager  > isConnectionException Entry  
                                                                                                               javax.naming.AuthenticationException: [LDAP: error code 49 - INVALID_CREDENTIALS: Bind failed: ERR_229 Cannot authenticate user cn=vmmtestuser,cn=users,dc=secfvt2,dc=austin,dc=ibm,dc=com]
    at java.naming/com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3158)
    at java.naming/com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3104)
    at java.naming/com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2890)
    at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2804)
    at java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:320)
    at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
    at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
    at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
    at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
    at org.apache.aries.jndi.ContextHelper.getInitialContextUsingBuilder(ContextHelper.java:244)
    at org.apache.aries.jndi.ContextHelper.getContextProvider(ContextHelper.java:208)
    at org.apache.aries.jndi.ContextHelper.getInitialContext(ContextHelper.java:141)
    at org.apache.aries.jndi.OSGiInitialContextFactoryBuilder.getInitialContext(OSGiInitialContextFactoryBuilder.java:51)
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:730)
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
    at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
    at java.naming/javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
    at com.ibm.ws.security.wim.adapter.ldap.context.TimedDirContext.<init>(TimedDirContext.java:80)
    at com.ibm.ws.security.wim.adapter.ldap.context.ContextManager.createDirContext(ContextManager.java:542)
    at com.ibm.ws.security.wim.adapter.ldap.LdapAdapter.authenticateWithPassword(LdapAdapter.java:3025)
    at com.ibm.ws.security.wim.adapter.ldap.LdapAdapter.login(LdapAdapter.java:634)

Если ваш пользователь прошел проверку подлинности, может возникнуть проблема с ролями безопасности в вашем приложении (у вашего прошедшего проверку пользователя нет необходимых ролей).

0 голосов
/ 14 апреля 2020

Я был очень поверхностным. Я начал эту реализацию, начиная с этого:

https://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_sec_ldap.html

Чтение без участия пользователя Я видел только два типа LDAP: «IBM Directory Server» и «Microsoft Active Directory». Сервер "

Я действительно не знал, с каким LDAP я работаю, так как я не смог найти его в своих рабочих конфигурациях websphere и поскольку эти конфигурации были сделаны после некоторых замечаний коллег.

Я скопировал код из ссылки выше, и, поскольку конфиги для IBM Directory Server вообще не работали, я использовал Microsoft Active Directory Server, который, казалось, работал и давал мне вводящее в заблуждение поведение, как объяснено в вопросе. ...

К сожалению, мои локальные веб-сферы также немного сбивают с толку, есть много тестов, которые могут быть ненужными.

Так что в конце это было не нужно, так как не используется , настройки federatedRepository и даже запись ref-ресурса в ibm-application-bnd не нужны.

Единственное, что мне было нужно, это четко знать, какой сервер использует ldap После комментария @Gas я проверил записи на сервере. xml о ldapType и фильтрах. Если бы я не вставлял код в код, я бы знал, что после ввода ldapType = "eclipse предлагает много типов ldap ... поэтому я напоминаю себе, что ldap не является сервером Microsoft Active Directory. В моем случае LDAP был ODSEE, К сожалению, нет в списке, поиск в Google и обнаружение в Википедии (https://en.wikipedia.org/wiki/Sun_Java_System_Directory_Server), что ODSEE ранее несколько лет назывался go Sun Java Сервер каталогов системы.

Сейчас, для каждого ldapType вы должны вводить правильные записи фильтров, ошибки конфигурации не выдаются, если вы допустили ошибку, просто не вошли в систему с сообщением, которое может вводить в заблуждение.

Итак, правильная конфигурация Ldap в моем случае:

<ldapRegistry
id="ldap"
realm="LdapRegistry"
ldapType="Sun Java System Directory Server"
host="host-copy-pasted-from-websphere-configuration"
port="port-copy-pasted-from-websphere-configuration"
baseDN="baseDN-copy-pasted-from-websphere-configuration"
searchTimeout="120"
reuseConnection="true"
ignoreCase="true"
bindDN="bindDN-copy-pasted-from-websphere-configuration"
bindPassword="bindDN-known-password"
sslEnabled="false">
<iplanetFilters
    userFilter="userFilter-copy-pasted-from-websphere-configuration"
    groupFilter="groupFilter-copy-pasted-from-websphere-configuration"
    groupIdMap="groupIdMap-copy-pasted-from-websphere-configuration"
    userIdMap="userIdMap-copy-pasted-from-websphere-configuration"
    groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember"
    >
</iplanetFilters>

Я нашел правильный фильтр для использования по исключению ... Я думаю, это правильная связь между ldapType и фильтрами:

  • Custom = customFilters
  • IBM Lotus Domino = domino50Filters
  • Сервер каталогов IBM SecureWay = securewayFilters
  • Сервер IBM Tivoli Directory = idsFilters
  • Microsoft Active Directory = a ctivedFilters
  • Netscape Directory Server = netscapeFilters
  • Novell eDirectory = edirectoryFilters
  • Sun Java Сервер каталогов = iplanetFilters

Теперь я могу войти, по крайней мере, в HTTP (еще не в HTTPS, но это уже другая история, и моя работа на этот вечер ...)

Приведенные выше соображения могут быть очевидны, а ошибка конфигурации тривиальна, но я предполагаю, Мой опыт может быть полезен для кого-то другого.

0 голосов
/ 14 апреля 2020

Добавление нового ответа для редактирования 3. Я думаю, что проблема заключается в том, что ваш externalid настроен как objectguid, который выглядит как null (objectguid: objectguid = null). Это не должно привести к NPE. Я открыл git выпуск . Если вы используете тот же сервер LDAP, что и tWAS, проверьте файл wimconfig. xml с сервера tWAS и определите, какой у вас атрибут externalID. Это может выглядеть примерно так:

<config:externalIdAttributes name="entryUUID" syntax="octet_string"/>

Затем настройте то же самое в Liberty .

<ldapRegistry ... >
    <attributeConfiguration>
        <externalIdAttribute name="entryUUID" syntax="octet_string" entityType="PersonAccount" />
        <externalIdAttribute name="entryUUID" syntax="octet_string" entityType="Group" />
    </attributeConfiguration>
</ldapRegistry>

Если вы не предоставите атрибут entityType, он будет применяться ко всем типам сущностей. Вы также можете сконфигурировать его как отличительное имя объекта, используя «detachedName» для атрибута «name» элемента «externalidAttribute».

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...