Назад | Перейти на главную страницу

Проблемы с настройкой единого входа с использованием аутентификации Kerberos

Мне нужна проверка подлинности приложения Ruby on Rail через Active Directory с использованием проверки подлинности Kerberos.

Некоторая техническая информация:

  1. Я использую Apache
  2. установлены mod_auth_kerb
  3. В httpd.conf я добавил LoadModule модули auth_kerb_module / mod_auth_kerb.so
  4. В /etc/krb5.conf Я добавил следующую конфигурацию

    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    
    [libdefaults]
     default_realm = EU.ORG.COM
     dns_lookup_realm = false
     dns_lookup_kdc = false
     ticket_lifetime = 24h
     forwardable = yes
    
    [realms]
     EU.ORG.COM = {
      kdc = eudc05.eu.org.com:88
      admin_server = eudc05.eu.org.com:749
      default_domain = eu.org.com
     }
    
    [domain_realm]
     .eu.org.com = EU.ORG.COM
     eu.org.com = EU.ORG.COM
    
    [appdefaults]
     pam = {
       debug = true
       ticket_lifetime = 36000
       renew_lifetime = 36000
       forwardable = true
       krb4_convert = false
     }
    
  5. Когда я тестирую kinit validuser и введите пароль, тогда аутентификация будет успешной.

  6. klist возвращается:

    Ticket cache: FILE:/tmp/krb5cc_600
    Default principal: validuser@EU.ORG.COM
    
    Valid starting     Expires            Service principal
    02/08/13 13:46:40  02/08/13 23:46:47  krbtgt/EU.ORG.COM@EU.ORG.COM
    
            renew until 02/09/13 13:46:40
    
    Kerberos 4 ticket cache: /tmp/tkt600
    klist: You have no tickets cached
    
  7. В конфигурации приложения Apache я добавил

    IfModule mod_auth_kerb.c>
    Location /winlogin>
        AuthType Kerberos
        AuthName "Kerberos Loginsss"
        KrbMethodNegotiate off
        KrbAuthoritative on
        KrbVerifyKDC off
        KrbAuthRealms EU.ORG.COM
        Krb5Keytab /home/crmdata/httpd/apache.keytab
        KrbSaveCredentials off
        Require valid-user
      </Location>
    </IfModule>
    
  8. Я перезапустил apache

Теперь несколько тестов:

  1. Когда я пытаюсь получить доступ к приложению из Win7, у меня появляется всплывающее окно сообщения с текстом:

    Warning: This server is requesting that your username and password be sent in an insecure manner (basic authentification without a secure connection)
    
  2. Когда я ввожу действительные учетные данные, мое приложение открывается успешно, и все работает нормально.

Вопросы:

  1. Это нормально, что для пользовательских всплывающих окон такие окна? Если я использую аутентификацию NTLM, такого всплывающего окна не будет. Я проверил IE Internet Options, и там стоит галочка «Enable Integrated Windows Authentication».

  2. Почему IE пытается отправить имя пользователя и пароль в приложение apache? Если я правильно понимаю, то Windows должна выполнить аутентификацию через Active Directory с использованием протокола Kerberos.

  3. Когда я пытаюсь получить доступ к приложению из Win7 и ввожу неверный учетные данные для всплывающего окна сообщения

    • Приложение сообщает, что аутентификация не удалась (это нормально)
    • В журнале ошибок apache я вижу:

      [error] [client 192.168.56.1] krb5_get_init_creds_password() failed: Client not found in Kerberos database 
      
    • Но теперь я не могу получить возможность ввести действительные учетные данные, только когда я перезапускаю IE, я снова могу получить всплывающее окно.

Что может быть неправильным или отсутствовать в моей настройке Kerberos?

Я прочитал в каком-то сообщении в блоге, что, вероятно, что-то нужно сделать на стороне Active Directory. Что именно?

Тебе нужно KrbMethodNegotiate on.
Без этого http-клиент по существу выполняет auth-basic для apache, а apache проверяет пароль на kdc.
Кроме того, в целях безопасности вам действительно следует установить KrbVerifyKDC on.