Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация через spnego 
:(
    Опции темы
gasdfgag
Дата 14.6.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.7.2011

Репутация: нет
Всего: нет



Здравствуйте
Возникла необходимость добавить в веб приложение возможность доменной авторизации. Это было сделано с помощью spnego. Все отлично работает, но нужно сделать так, чтобы пользователь не вводил каждый раз логин и пароль (ведь пользователь уже залогинился в винде через доменку). Используем Tomcat 6. Кто сталкивался с такой проблемой, подскажите, куда копать?

Часть файла web.xml с настройками spnego:
Код

<filter>
        <filter-name>SpnegoHttpFilter</filter-name>
        <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>

        <init-param>
            <param-name>spnego.allow.basic</param-name>
            <param-value>true</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.allow.localhost</param-name>
            <param-value>true</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.allow.unsecure.basic</param-name>
            <param-value>true</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.login.client.module</param-name>
            <param-value>spnego-client</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.krb5.conf</param-name>
            <param-value>krb5.conf</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.login.conf</param-name>
            <param-value>login.conf</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.preauth.username</param-name>
            <param-value>user</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.preauth.password</param-name>
            <param-value>123</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.login.server.module</param-name>
            <param-value>spnego-server</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.prompt.ntlm</param-name>
            <param-value>true</param-value>
        </init-param>
        
        <init-param>
            <param-name>spnego.logger.level</param-name>
            <param-value>1</param-value>
        </init-param>
    </filter>

<filter-mapping>
        <filter-name>SpnegoHttpFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


Файл krb5.conf:
Код

[libdefaults]
    default_realm = LEASING.LOCAL
    default_tkt_enctypes = simple aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
    default_tgs_enctypes = simple aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
    permitted_enctypes   = simple aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc

[realms]
    LEASING.LOCAL  = {
        kdc = dc1.leasing.local:88
        default_domain = leasing.local 
}

[domain_realm]
    dc1.leasing.local = LEASING.LOCAL
    .leasing.local.LOCAL = LEASING.LOCAL 



Файл login.conf:
Код

spnego-client {
    com.sun.security.auth.module.Krb5LoginModule required;
};

spnego-server {
    com.sun.security.auth.module.Krb5LoginModule required
    storeKey=true
    isInitiator=false;
};


PM MAIL   Вверх
AntonSaburov
Дата 14.6.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Что-то не встречал я возможностей у Tomcat 6 виндовой аутентификации. В 7-ке видел, а в 6-ке - нет.
PM MAIL WWW ICQ   Вверх
gasdfgag
Дата 14.6.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.7.2011

Репутация: нет
Всего: нет



тут наверное дело не в версии Tomcat, а именно в использовании spnego для аутентификации
PM MAIL   Вверх
AntonSaburov
Дата 15.6.2012, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Я этим вопросом не занимался, но на 7-ку такой раздел есть - http://tomcat.apache.org/tomcat-7.0-doc/wi...auth-howto.html
А в 6-ке такого нет. Хотя опять же т.к. не занимался мое суждение крайне поверхностно.
PM MAIL WWW ICQ   Вверх
gasdfgag
Дата 15.6.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.7.2011

Репутация: нет
Всего: нет



Перечитал уже кучу форумов, документации и статей, в том числе и по Вашей ссылке. Никакого результата не добился. Выяснил так же, что если в IE включить опцию "Разрешить встроенную проверку подлинности Windows", то выскакивает ошибка, если запускать на локалхосте:
Код

javax.servlet.ServletException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:233)


root cause 

GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
    sun.security.jgss.GSSHeader.<init>(Unknown Source)
    sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(Unknown Source)
    sun.security.jgss.spnego.SpNegoContext.acceptSecContext(Unknown Source)
    sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    net.sourceforge.spnego.SpnegoAuthenticator.doSpnegoAuth(SpnegoAuthenticator.java:444)
    net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:283)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)




Если на другом компьютере в домене:
Код

exception 

javax.servlet.ServletException: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:233)


root cause 

GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
    sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:741)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:858)
    sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:532)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    net.sourceforge.spnego.SpnegoAuthenticator.doSpnegoAuth(SpnegoAuthenticator.java:444)
    net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:283)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)


root cause 

KrbException: Checksum failed
    sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:85)
    sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:77)
    sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:168)
    sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:268)
    sun.security.krb5.KrbApReq.<init>(KrbApReq.java:134)
    sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:79)
    sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:724)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:858)
    sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:532)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    net.sourceforge.spnego.SpnegoAuthenticator.doSpnegoAuth(SpnegoAuthenticator.java:444)
    net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:283)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)


root cause 

java.security.GeneralSecurityException: Checksum failed
    sun.security.krb5.internal.crypto.dk.ArcFourCrypto.decrypt(ArcFourCrypto.java:388)
    sun.security.krb5.internal.crypto.ArcFourHmac.decrypt(ArcFourHmac.java:74)
    sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:83)
    sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:77)
    sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:168)
    sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:268)
    sun.security.krb5.KrbApReq.<init>(KrbApReq.java:134)
    sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:79)
    sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:724)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:858)
    sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:532)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    net.sourceforge.spnego.SpnegoAuthenticator.doSpnegoAuth(SpnegoAuthenticator.java:444)
    net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:283)
    net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)




Начал смотреть в http-снифере. При включенной опции IE "Разрешить встроенную проверку подлинности Windows", происходит negotiate аутентификация (без запроса логина и пароля), при отключенной - basic аутентификация (с запросом логина и пароля). И во время negotiate аутентификации выскакивают эти ошибки
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.