Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
Предыдущее Учебное руководство Учебное Введение и TOC Следующее Учебное руководство

Аутентификация JAAS

Служба Аутентификации и авторизации Java (JAAS) была представлена как дополнительный пакет Java 2 SDK, Standard Edition (J2SDK), v 1.3. JAAS был теперь интегрирован в J2SDK 1.4.

JAAS может использоваться в двух целях:

Этот раздел обеспечивает основное учебное руководство для компонента аутентификации. Компонент авторизации будет описан в учебном руководстве по Авторизации JAAS.

Аутентификация JAAS выполняется сменным способом. Это разрешает приложениям Java оставаться независимыми от базовых технологий аутентификации. Новые или обновленные технологии могут быть включены, не требуя модификаций к приложению непосредственно. Во время выполнения определяется реализация для определенной технологии аутентификации использоваться. Реализация определяется в конфигурационном файле входа в систему. Технологией аутентификации, используемой для этого учебного руководства, является Kerberos. (См. Требования Kerberos.)

Остальная часть этого учебного руководства состоит из следующих разделов:

  1. Учебный Код Аутентификации
  2. Конфигурация Входа в систему
  3. Выполнение Кода
  4. Выполнение Кода с Менеджером безопасности

Если Вы хотите сначала видеть учебный код в действии, можно пропустить непосредственно к Выполнению Кода и затем вернуться к другим разделам, чтобы узнать о кодировании и деталях конфигурационного файла.

Учебный Код Аутентификации

Наш учебный код аутентификации содержится в единственном исходном файле, JaasAcn.java. Этот файл main метод выполняет аутентификацию и затем сообщает действительно ли аутентификация, за которой следуют.

Код для того, чтобы аутентифицировать пользователя очень прост, состоя только из двух шагов:

  1. Инстанцируйте LoginContext.
  2. Вызовите LoginContext login метод.

Сначала абсолютный код показывают, сопровождается полным списком JaasAcn.java исходный файл, завершитесь с операторами импорта и обработкой ошибок.

Инстанцирование LoginContext

Чтобы аутентифицировать пользователя, Вы сначала нуждаетесь в a javax.security.auth.login.LoginContext. Вот основной способ инстанцировать LoginContext:

import javax.security.auth.login.*;
. . .
LoginContext lc = 
    new LoginContext(<config file entry name>,
           <CallbackHandler to be used for user interaction>); 
и вот особенный метод, наш учебный код делает инстанцирование:
import javax.security.auth.login.*;
import com.sun.security.auth.callback.TextCallbackHandler;
. . .
LoginContext lc = 
    new LoginContext("JaasSample", 
          new TextCallbackHandler());

Параметрами является следующее:

  1. Имя записи в конфигурационном файле входа в систему JAAS

    Это - имя для LoginContext, чтобы использовать, чтобы искать запись для этого приложения в конфигурационном файле входа в систему JAAS, описанном здесь. Такая запись определяет класс (ы), которые реализуют требуемую базовую технологию (и) аутентификации. Класс (ы) должен реализовать интерфейс LoginModule, который находится в javax.security.auth.spi пакет.

    В нашем примере кода мы используем Krb5LoginModule в com.sun.security.auth.module пакет, который выполняет аутентификацию Kerberos.

    У записи в конфигурационном файле входа в систему, который мы используем для этого учебного руководства (см. jaas.conf) есть имя "JaasSample", так, чтобы было имя, которое мы определяем как первый параметр конструктору LoginContext.

  2. Экземпляр CallbackHandler.

    Когда LoginModule должен связаться с пользователем, например чтобы попросить имя пользователя и пароль, он не делает так непосредственно. Это - то, потому что есть различные способы связаться с пользователем, и это является требуемым для LoginModules, чтобы остаться независимым от различных типов взаимодействия с пользователем. Скорее LoginModule вызывает CallbackHandler, чтобы выполнить взаимодействие с пользователем и получить требуемую информацию, такую как имя пользователя и пароль. (CallbackHandler является интерфейсом в javax.security.auth.callback pkg.)

    Экземпляр определенного CallbackHandler, который будет использоваться, определяется как второй параметр конструктору LoginContext. LoginContext вперед, что экземпляр к базовому LoginModule (в нашем случае Krb5LoginModule). Приложение обычно обеспечивает свою собственную реализацию CallbackHandler. Двум простым CallbackHandlers, TextCallbackHandler и DialogCallbackHandler, предоставляют в com.sun.security.auth.callback пакет как демонстрационные реализации. Наш код использует TextCallbackHandler, который информация о выводах к и ввод чтений из командной строки.

Вызов LoginContext login Метод

Как только у нас есть LoginContext lc, мы можем вызвать login метод, чтобы выполнить процесс аутентификации:

lc.login();

LoginContext инстанцирует нового пустого javax.security.auth.Subject объект (который представляет пользователя или аутентифицируемую службу). LoginContext создает сконфигурированный LoginModule (в нашем случае Krb5LoginModule) и инициализирует это с этим новым Предметом и TextCallbackHandler.

LoginContext login метод тогда вызывает методы в Krb5LoginModule, чтобы выполнить вход в систему и аутентификацию. Krb5LoginModule использует TextCallbackHandler, чтобы получить имя пользователя и пароль. Затем Krb5LoginModule будет использовать эту информацию, чтобы получить удостоверения пользователя от Kerberos KDC. См. справочную документацию Kerberos.

Если аутентификация успешна, Krb5LoginModule заполняет Предмет с (1) Принципал Kerberos представление пользователя и (2) учетные данные пользователя (TGT). См. Предметы, Принципалы, Аутентификацию, и Учетные данные для информации на этих условиях.

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

Полное JaasAcn.java Код

Теперь, когда Вы видели абсолютный код, требуемый аутентифицировать пользователя, мы можем соединить все это в полный класс в JaasAcn.java, который включает соответствующие операторы импорта и обработку ошибок:

import javax.security.auth.*;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
import com.sun.security.auth.callback.TextCallbackHandler;

/**
 * This JaasAcn application attempts to authenticate a user
 * and reports whether or not the authentication was successful.
 */
public class JaasAcn {

  public static void main(String[] args) {

      // Obtain a LoginContext, needed for authentication. Tell 
      // it to use the LoginModule implementation specified by 
      // the entry named "JaasSample" in the JAAS login 
      // configuration file and to also use the specified 
      // CallbackHandler.
      LoginContext lc = null;
      try {
          lc = new LoginContext("JaasSample", 
                      new TextCallbackHandler());
      } catch (LoginException le) {
          System.err.println("Cannot create LoginContext. "
              + le.getMessage());
          System.exit(-1);
      } catch (SecurityException se) {
          System.err.println("Cannot create LoginContext. "
              + se.getMessage());
          System.exit(-1);
      } 

      try {
    
          // attempt authentication
          lc.login();
    
      } catch (LoginException le) {
    
          System.err.println("Authentication failed: "
          System.err.println("  " + le.getMessage());
          System.exit(-1);
    
      }
    
      System.out.println("Authentication succeeded!");
    
    }
}

Конфигурация Входа в систему

Аутентификация JAAS выполняется сменным способом, таким образом, приложения могут остаться независимыми от базовых технологий аутентификации. Системный администратор определяет технологии аутентификации, или LoginModules, чтобы использоваться для каждого приложения и конфигурирует их в Конфигурации входа в систему. Источник конфигурационной информации (например, файл или база данных) до тока javax.security.auth.login. Реализация конфигурации. Значение по умолчанию Configuration реализация от Sun Microsystems читает конфигурационную информацию из конфигурационных файлов, как описано в com.sun.security.auth.login.ConfigFile.html.

См. Конфигурационный файл Входа в систему JAAS для информации относительно того, каков конфигурационный файл входа в систему, что это содержит, и как определить, какой конфигурационный файл входа в систему должен использоваться.

Конфигурационный файл Входа в систему для Этого Учебного руководства

Как отмечено, конфигурационный файл входа в систему, который мы используем для этого учебного руководства, jaas.conf, содержит только одну запись, которая является

JaasSample {
  com.sun.security.auth.module.Krb5LoginModule required;
};

Эту запись называют "JaasSample", и это - имя что наше учебное приложение, JaasAcn, использование, чтобы обратиться к этой записи. Запись определяет, что LoginModule, который будет использоваться, чтобы сделать пользовательскую аутентификацию, является Krb5LoginModule в com.sun.security.auth.module пакет и что этот Krb5LoginModule обязан "успешно выполняться" для аутентификации, которую будут считать успешным. Krb5LoginModule успешно выполняется, только если имя и пароль, предоставленное пользователем, успешно используется, чтобы зарегистрировать пользователя в Kerberos KDC.

Для получения информации обо всех возможных вариантах, которые можно передать к Krb5LoginModule, см. документацию Krb5LoginModule.

Выполнение Кода

Чтобы выполнить наш учебный код аутентификации JAAS, все, что необходимо сделать,

  1. Поместите исходный файл приложения JaasAcn.java и конфигурационный файл входа в систему jaas.conf в каталог.
  2. Скомпилировать JaasAcn.java:
    javac JaasAcn.java
    
  3. Выполнитесь JaasAcn приложение, определяя

Полная команда ниже. Убедитесь, что заменили <your_realm> с Вашей областью Kerberos, и <your_kdc> с Вашим Kerberos KDC.

java -Djava.security.krb5.realm=<your_realm> 
 -Djava.security.krb5.kdc=<your_kdc> 
 -Djava.security.auth.login.config=jaas.conf JaasAcn

Введите все это на одной строке. Многократные строки используются здесь для четкости.

Вы будете запрошены Ваше имя пользователя Kerberos и пароль, и базовый механизм аутентификации Kerberos, определенный в конфигурационном файле входа в систему, зарегистрирует Вас в Kerberos. Если Ваш вход в систему будет успешен, то Вы будете видеть следующее сообщение:

Authentication succeeded!
Если вход в систему не будет успешен (например, если Вы напишете свой пароль c орфографическими ошибками), то Вы будете видеть
Authentication failed:
сопровождаемый причиной отказа. Например, если Вы вводите свое имя пользователя с опечаткой, можно видеть сообщение как следующий (где форматирование немного изменяется здесь, чтобы увеличить четкость):
Authentication failed:
  Kerberos Authentication Failed:
    javax.security.auth.login.LoginException: 
      KrbException: Client not found in Kerberos database

Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.

После решения любых проблем, запущенных повторно программа, чтобы попробовать еще раз.

Выполнение Кода с Менеджером безопасности

Когда программа Java выполняется с установленным менеджером безопасности, программе не позволяют получить доступ к ресурсам или иначе выполнить секретные операции безопасности, если этому явно не предоставляют разрешение, чтобы сделать так политикой безопасности в действительности. В платформах Java, которые являются совместимыми с J2SE v 1.2 и позже, разрешение должна предоставить запись в файле политики.

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

Чтобы запустить приложение с менеджером безопасности, просто вызовите интерпретатор с a -Djava.security.manager параметр включается в командную строку.

Если Вы пытаетесь вызвать JaasAcn с менеджером безопасности, но не определяя файла политики, Вы получите следующий (если у Вас не будет установки политики по умолчанию в другом месте, которая предоставляет необходимые полномочия или предоставления AllPermission):

% java -Djava.security.manager \
 -Djava.security.krb5.realm=<your_realm> \
 -Djava.security.krb5.kdc=<your_kdc> \
 -Djava.security.auth.login.config=jaas.conf JaasAcn
Exception in thread "main" java.security.AccessControlException: 
  access denied (
  javax.security.auth.AuthPermission createLoginContext.JaasSample)

Как можно видеть, Вы получаете AccessControlException, потому что мы не создали и использовали файл политики, предоставляющий наш код разрешение, которое требуется, чтобы разрешить создать LoginContext.

Вот полные шаги, требуемые, чтобы быть в состоянии выполнить наш JaasAcn приложение с установленным менеджером безопасности. Можно пропустить первые два шага, если Вы уже сделали их, как описано в Выполнении Кода.

  1. Поместите исходный файл приложения JaasAcn.java и конфигурационный файл входа в систему jaas.conf в каталог.
  2. Скомпилировать JaasAcn.java:
    javac JaasAcn.java
    
  3. Создайте файл JAR, содержащий JaasAcn.class:
    jar -cvf JaasAcn.jar JaasAcn.class
    

    Эта команда создает файл JAR, JaasAcn.jar, и места JaasAcn.class файл в этом.

  4. Создайте файл политики, допускающий, что код в JAR регистрирует необходимое разрешение.

    Разрешение, которое необходимо коду, пытающемуся инстанцировать LoginContext, является a javax.security.auth.AuthPermission с целью "createLoginContext. <имя записи>". Здесь, <имя записи> обращается к имени записи конфигурационного файла входа в систему что ссылки приложения в его инстанцировании LoginContext. Имя, используемое нашим JaasAcn инстанцирование LoginContext приложения является "JaasSample", как можно видеть в коде:

    LoginContext lc = 
        new LoginContext("JaasSample", 
              new TextCallbackHandler());
    
    Таким образом, разрешение, которому нужно предоставить JaasAcn.jar
    permission javax.security.auth.AuthPermission 
      "createLoginContext.JaasSample";
    
    Скопируйте файл политики jaasacn.policy в тот же самый каталог как это, в котором Вы сохранили JaasAcn.java, и т.д.. Это - текстовый файл, содержащий следующий grant оператор, чтобы предоставить JaasAcn.jar (в текущем каталоге) необходимое разрешение:
    grant codebase "file:./JaasAcn.jar" {
       permission javax.security.auth.AuthPermission 
                        "createLoginContext.JaasSample";
    };
    

    Отметьте: файлы Политики и структура записей в пределах них описываются в Синтаксисе Файла Реализации и Политики Политики По умолчанию. Полномочия описываются здесь.

  5. Выполнитесь JaasAcn приложение, определяя
    1. соответствующим -classpath пункт, что классы должны разыскиваться в JaasAcn.jar Файл JAR,
    2. -Djava.security.manager то, что менеджер безопасности должен быть установлен,
    3. -Djava.security.krb5.realm=<your_realm> то, что Ваша область Kerberos является определенной той. Например, если Ваша область "KRBNT-OPERATIONS.EXAMPLE.COM", Вы поместили -Djava.security.krb5.realm=KRBNT-OPERATIONS.EXAMPLE.COM.
    4. -Djava.security.krb5.kdc=<your_kdc> то, что Ваш Kerberos KDC является определенным тем. Например, если Ваш KDC "samplekdc.example.com", Вы поместили -Djava.security.krb5.kdc=samplekdc.example.com.
    5. -Djava.security.policy=jaasacn.policy то, что файл политики, который будет использоваться, jaasacn.policy, и
    6. -Djava.security.auth.login.config=jaas.conf то, что конфигурационный файл входа в систему, который будет использоваться, jaas.conf.

    Полная команда ниже. Убедитесь, что заменили <your_realm> с Вашей областью Kerberos, и <your_kdc> с Вашим Kerberos KDC.

    java -classpath JaasAcn.jar -Djava.security.manager 
     -Djava.security.krb5.realm=<your_realm> 
     -Djava.security.krb5.kdc=<your_kdc> 
     -Djava.security.policy=jaasacn.policy 
     -Djava.security.auth.login.config=jaas.conf JaasAcn
    

    Введите все это на одной строке. Многократные строки используются здесь для четкости. Если команда является слишком длинной для Вашей системы, Вы, возможно, должны поместить это в.bat файл (для Windows) или.sh файл (для UNIX) и затем петлять, чтобы выполнить команду.

    Так как указанный файл политики содержит запись, предоставляющую код необходимое разрешение, JaasAcn будет позволен инстанцировать LoginContext и продолжать выполнение. Вы будете запрошены Ваше имя пользователя Kerberos и пароль, и базовый механизм аутентификации Kerberos, определенный в конфигурационном файле входа в систему, зарегистрирует Вас в Kerberos. Если Ваш вход в систему будет успешен, то Вы будете видеть сообщение "Аутентификация, за которой следуют!" и в противном случае Вы будете видеть "Отказавшую аутентификацию:" сопровождаемый причиной отказа.

    Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.


Предыдущее Учебное руководство Учебное Введение и TOC Следующее Учебное руководство

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами