Проверка подлинности keycloak spnego завершается с ошибкой «Базовый контекст механизма не был инициализирован», «result = ACCEPT_INCOMPLETE» - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь настроить keycloak с адаптером ldap для активной директории и поддержкой spnego. Это тестовая установка, все работает на той же виртуальной машине с Windows Server 2016, что и операционная система. Адаптер ldap с интеграцией Kerberos, похоже, настроен правильно - синхронизация пользователя и аутентификация kerberos работают.

Однако при попытке использовать встроенную аутентификацию Windows (spnego) с Chrome в браузере отображается страница входа.

Чтобы заставить это работать, я хотел бы лучше понять следующие сообщения журнала, которые я получаю в keycloak. Конечно, любые другие предложения о том, что может быть основной проблемой, также очень ценятся!

16:50:06,194 INFO  [stdout] (default task-5) Debug is  true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null isInitiator false KeyTab is C:\keycloak\standalone\configuration\keycloak.keytab refreshKrb5Config is false principal is HTTP/keycloak.local@KEYCLOAK.LOCAL tryFirstPass is false useFirstPass is false storePass is false clearPass is false
16:50:06,210 INFO  [stdout] (default task-5) principal is HTTP/keycloak.local@KEYCLOAK.LOCAL
16:50:06,210 INFO  [stdout] (default task-5) Will use keytab
16:50:06,210 INFO  [stdout] (default task-5) Commit Succeeded
16:50:06,210 INFO  [stdout] (default task-5)
16:50:06,225 INFO  [stdout] (default task-5) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:50:06,225 INFO  [stdout] (default task-5) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:50:06,225 INFO  [stdout] (default task-5) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:50:06,225 INFO  [stdout] (default task-5) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:50:06,225 INFO  [stdout] (default task-5) Entered SpNegoContext.acceptSecContext with state=STATE_NEW
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: receiving token = a0 75 30 73 a0 30 30 2e 06 0a 2b 06 01 04 01 82 37 02 02 0a 06 09 2a 86 48 82 f7 12 01 02 02 06 09 2a 86 48 86 f7 12 01 02 02 06 0a 2b 06 01 04 01 82 37 02 02 1e a2 3f 04 3d 4e 54 4c 4d 53 53 50 00 01 00 00 00 97 b2 08 e2 08 00 08 00 35 00 00 00 0d 00 0d 00 28 00 00 00 0a 00 39 38 00 00 00 0f 50 50 4b 45 59 43 4c 4f 41 4b 32 32 30 4b 45 59 43 4c 4f 41 4b
16:50:06,225 INFO  [stdout] (default task-5) SpNegoToken NegTokenInit: reading Mechanism Oid = 1.3.6.1.4.1.311.2.2.10
16:50:06,225 INFO  [stdout] (default task-5) SpNegoToken NegTokenInit: reading Mechanism Oid = 1.2.840.48018.1.2.2
16:50:06,225 INFO  [stdout] (default task-5) SpNegoToken NegTokenInit: reading Mechanism Oid = 1.2.840.113554.1.2.2
16:50:06,225 INFO  [stdout] (default task-5) SpNegoToken NegTokenInit: reading Mechanism Oid = 1.3.6.1.4.1.311.2.2.30
16:50:06,225 INFO  [stdout] (default task-5) SpNegoToken NegTokenInit: reading Mech Token
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: received token of type = SPNEGO NegTokenInit
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext: negotiated mechanism = 1.2.840.113554.1.2.2
16:50:06,225 INFO  [stdout] (default task-5) The underlying mechanism context has not been initialized
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: mechanism wanted = 1.2.840.113554.1.2.2
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: negotiated result = ACCEPT_INCOMPLETE
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: sending token of type = SPNEGO NegTokenTarg
16:50:06,225 INFO  [stdout] (default task-5) SpNegoContext.acceptSecContext: sending token = a1 14 30 12 a0 03 0a 01 01 a1 0b 06 09 2a 86 48 86 f7 12 01 02 02
16:50:06,225 INFO  [stdout] (default task-5) The underlying mechanism context has not been initialized
16:50:06,225 INFO  [stdout] (default task-5) The underlying mechanism context has not been initialized
16:50:06,225 INFO  [stdout] (default task-5)            [Krb5LoginModule]: Entering logout
16:50:06,225 INFO  [stdout] (default task-5)            [Krb5LoginModule]: logged out Subject

Моя интерпретация до сих пор:

Из этого post Я пришел к выводу, что «получающий токен» является токеном NTLM. Keycloak не поддерживает NTLM, поэтому он запрашивает токен в соответствии с «Mechanism Oid = 1.2.840.48018.1.2.2» из браузера. Но затем переговоры каким-то образом застопорились.

Вопросы:

  • Что означает "Базовый контекст механизма не был инициализирован«? Это признак того, что какая-то конфигурация отсутствует?

  • Что означает "SpNegoContext.acceptSecContext: согласованный результат = ACCEPT_INCOMPLETE" ? Означает ли это, что переговоры не пройдены или требуется дополнительная информация?

Дополнительная информация:

  • Keycloakверсия 7.0.0

  • Chrome, Firefox и IE ведут себя одинаково, поэтому я думаю, что они делегируют согласование spnego с ОС.

  • Я запускаю браузеры на хосте, где работает keycloak. Существуют сообщения 1 , 2 , которые предполагают, что наличие клиента и сервера на одном компьютере может привести к токену NTLM.

  • Журналывыше те, которые я получаю при доступе к keycloak от localhost. Когда я использую IP-адрес или полное имя хоста, вместо этого я получаю исключение:

16:44:08,698 INFO  [stdout] (default task-2) Debug is  true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null isInitiator false KeyTab is C:\keycloak\standalone\configuration\keycloak.keytab refreshKrb5Config is false principal is HTTP/keycloak.local@KEYCLOAK.LOCAL tryFirstPass is false useFirstPass is false storePass is false clearPass is false
16:44:08,704 INFO  [stdout] (default task-2) principal is HTTP/keycloak.local@KEYCLOAK.LOCAL
16:44:08,705 INFO  [stdout] (default task-2) Will use keytab
16:44:08,705 INFO  [stdout] (default task-2) Commit Succeeded
16:44:08,705 INFO  [stdout] (default task-2)
16:44:08,706 INFO  [stdout] (default task-2) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:44:08,707 INFO  [stdout] (default task-2) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:44:08,709 INFO  [stdout] (default task-2) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:44:08,711 INFO  [stdout] (default task-2) Found KeyTab C:\keycloak\standalone\configuration\keycloak.keytab for HTTP/keycloak.local@KEYCLOAK.LOCAL
16:44:08,712 WARN  [org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator] (default task-2) SPNEGO login failed: java.security.PrivilegedActionException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Unknown Source)
        at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticate(SPNEGOAuthenticator.java:68)
        at org.keycloak.storage.ldap.LDAPStorageProvider.authenticate(LDAPStorageProvider.java:692)
[...]
...