Spec-Zone .ru
спецификации, руководства, описания, API
|
Служба Аутентификации и авторизации Java (JAAS) была представлена как дополнительный пакет Java 2 SDK, Standard Edition (J2SDK), v 1.3. JAAS был теперь интегрирован в J2SDK 1.4.
JAAS может использоваться в двух целях:
Этот раздел обеспечивает основное учебное руководство для компонента аутентификации. Компонент авторизации будет описан в учебном руководстве по Авторизации JAAS.
Аутентификация JAAS выполняется сменным способом. Это разрешает приложениям Java оставаться независимыми от базовых технологий аутентификации. Новые или обновленные технологии могут быть включены, не требуя модификаций к приложению непосредственно. Реализация для определенной технологии аутентификации использоваться определяется во времени выполнения. Реализация определяется в конфигурационном файле входа в систему. Технологией аутентификации, используемой для этого учебного руководства, является Kerberos. (См. Требования Kerberos.)
Остальная часть этого учебного руководства состоит из следующих разделов:
Если Вы хотите сначала видеть учебный код в действии, можно пропустить непосредственно к Выполнению Кода и затем вернуться к другим разделам, чтобы узнать о кодировании и деталях конфигурационного файла.
Наш учебный код аутентификации содержится в единственном исходном файле, JaasAcn.java. Этот файл main
метод выполняет аутентификацию и затем сообщает действительно ли аутентификация, за которой следуют.
Код для того, чтобы аутентифицировать пользователя очень прост, состоя только из двух шагов:
Сначала абсолютный код показывают, сопровождается полным списком JaasAcn.java
исходный файл, завершитесь с операторами импорта и обработкой ошибок.
Чтобы аутентифицировать пользователя, Вы сначала нуждаетесь в 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());
Параметрами является следующее:
Это - имя для LoginContext, чтобы использовать, чтобы искать запись для этого приложения в конфигурационном файле входа в систему JAAS, описанном здесь. Такая запись определяет class, которые реализуют требуемую базовую технологию (и) аутентификации. class должен реализовать интерфейс LoginModule, который находится в javax.security.auth.spi
пакет.
В нашем примере кода мы используем Krb5LoginModule
в com.sun.security.auth.module
пакет, который выполняет аутентификацию Kerberos.
У записи в конфигурационном файле входа в систему, который мы используем для этого учебного руководства (см. jaas.conf) есть имя "JaasSample", так, чтобы было имя, которое мы определяем как первый параметр конструктору LoginContext.
Когда 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, который информация о выводах к и ввод чтений из командной строки.
login
МетодКак только у нас есть LoginContext lc
, мы можем вызвать login
метод, чтобы выполнить процесс аутентификации:
lc.login();
LoginContext инстанцирует нового пустого javax.security.auth.Subject
объект (который представляет пользователя или аутентифицируемую службу). LoginContext создает сконфигурированный LoginModule (в нашем случае Krb5LoginModule) и инициализирует это с этим новым Предметом и TextCallbackHandler.
LoginContext login
метод тогда вызывает методы в Krb5LoginModule, чтобы выполнить вход в систему и аутентификацию. Krb5LoginModule использует TextCallbackHandler, чтобы получить имя пользователя и пароль. Затем Krb5LoginModule будет использовать эту информацию, чтобы получить удостоверения пользователя от Kerberos KDC. См.
Если аутентификация успешна, Krb5LoginModule заполняет Предмет с (1) Принципал Kerberos представление пользователя и (2) учетные данные пользователя (TGT). См. Предметы, Принципалы, Аутентификацию, и Учетные данные для информации на этих условиях.
Вызывающее приложение может впоследствии получить аутентифицируемый Предмет, вызывая LoginContext getSubject
метод, хотя делая так не необходим для этого учебного руководства.
JaasAcn.java
КодТеперь, когда Вы видели абсолютный код, требуемый аутентифицировать пользователя, мы можем соединить все это в полный class в 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, все, что необходимо сделать,
JaasAcn.java
: javac JaasAcn.java
JaasAcn
приложение, определяя -Djava.security.krb5.realm=<your_realm>
то, что Ваша область Kerberos является определенной той. Например, если Ваша область "KRBNT-OPERATIONS.EXAMPLE.COM", Вы поместили -Djava.security.krb5.realm=KRBNT-OPERATIONS.EXAMPLE.COM
.-Djava.security.krb5.kdc=<your_kdc>
то, что Ваш Kerberos KDC является определенным тем. Например, если Ваш KDC "samplekdc.example.com", Вы поместили -Djava.security.krb5.kdc=samplekdc.example.com
.-Djava.security.auth.login.config=jaas.conf
то, что конфигурационный файл входа в систему, который будет использоваться, jaas.conf
.Полная команда ниже. Убедитесь, что заменили <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
приложение с установленным менеджером безопасности. Можно пропустить первые два шага, если Вы уже сделали их, как описано в Выполнении Кода.
JaasAcn.java
: javac JaasAcn.java
JaasAcn.class
: jar -cvf JaasAcn.jar JaasAcn.class
Эта команда создает файл JAR, JaasAcn.jar
, и места JaasAcn.class
файл в этом.
Разрешение, которое необходимо коду, пытающемуся инстанцировать 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"; };
Отметьте: файлы Политики и структура записей в пределах них описываются в Синтаксисе Файла Реализации и Политики Политики Значения по умолчанию. Полномочия описываются здесь.
JaasAcn
приложение, определяя -classpath
пункт, что классы должны разыскиваться в JaasAcn.jar
Файл JAR,-Djava.security.manager
то, что менеджер безопасности должен быть установлен,-Djava.security.krb5.realm=<your_realm>
то, что Ваша область Kerberos является определенной той. Например, если Ваша область "KRBNT-OPERATIONS.EXAMPLE.COM", Вы поместили -Djava.security.krb5.realm=KRBNT-OPERATIONS.EXAMPLE.COM
.-Djava.security.krb5.kdc=<your_kdc>
то, что Ваш Kerberos KDC является определенным тем. Например, если Ваш KDC "samplekdc.example.com", Вы поместили -Djava.security.krb5.kdc=samplekdc.example.com
.-Djava.security.policy=jaasacn.policy
то, что файл политики, который будет использоваться, jaasacn.policy
, и-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. Если Ваш вход в систему будет успешен, то Вы будете видеть сообщение "Аутентификация, за которой следуют!" и в противном случае Вы будете видеть "Отказавшую аутентификацию:" сопровождаемый причиной отказа.
Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.