Spec-Zone .ru
спецификации, руководства, описания, API
|
Это учебное руководство разворачивает программу и файл политики, разработанный в учебном руководстве по Аутентификации JAAS, чтобы демонстрировать компонент авторизации JAAS, который гарантирует, что у аутентифицируемой вызывающей стороны есть права управления доступом (полномочия), требуемые сделать последующие секретные операции безопасности. Так как компонент авторизации требует, чтобы пользовательская аутентификация сначала была завершена, пожалуйста, считайте учебное руководство по Аутентификации JAAS сначала, если Вы уже не сделали так.
Остальная часть этого учебного руководства состоит из следующих разделов:
Если Вы хотите сначала видеть учебный код в действии, можно пропустить непосредственно к Выполнению Учебного Кода Авторизации и затем вернуться к другим разделам, чтобы учиться больше.
Авторизация JAAS расширяет существующую архитектуру безопасности Java, которая использует политику безопасности, чтобы определить то, что права доступа предоставляют выполняющемуся коду. Та архитектура, представленная в Java 2 платформы, центральна кодом. Таким образом, полномочия предоставляют основанные на характеристиках кода: куда код прибывает из и подписывается ли он в цифровой форме и раз так кого. Мы видели пример этого в jaasacn.policy
файл используется в учебном руководстве по Аутентификации JAAS. Тот файл содержит следующее:
grant codebase "file:./JaasAcn.jar" { permission javax.security.auth.AuthPermission "createLoginContext.JaasSample"; };
Это предоставляет код в JaasAcn.jar
файл, расположенный в текущем каталоге, указанном разрешении. (Никакое подписывающее лицо не определяется, таким образом, не имеет значения, подписывается ли код или нет.)
Авторизация JAAS увеличивает существующие центральные кодом средства управления доступом с новыми центральными пользователем средствами управления доступом. Полномочия можно предоставить базируемые не только на том, что код выполняет, но также и на том, кто выполняет его.
Когда приложение использует аутентификацию JAAS, чтобы аутентифицировать пользователя (или другой объект такой как сервис), Предмет создается в результате. Цель Предмета состоит в том, чтобы представить аутентифицируемого пользователя. Предмет состоит из ряда Принципалов, где каждый Принципал представляет идентификационные данные для того пользователя. Например, у Предмета мог быть Принципал имени ("Сьюзен Смит") и Принципал Номера социального страхования ("987-65-4321"), таким образом отличая этот Предмет от других Предметов.
Полномочия можно предоставить в политике определенным Принципалам. После того, как пользователь аутентифицировался, приложение может связать Предмет с текущим контекстом управления доступом. Для каждой последующей проверенной в безопасности работы, (локальный доступ к файлу, например), Среда выполнения Java автоматически определит, предоставляет ли политика необходимое разрешение только определенному Принципалу и если так, работа будет позволена, только если Предмет, связанный с контекстом управления доступом, содержит определяемый Принципал.
Чтобы заставить авторизацию JAAS иметь место, следующее требуется:
Файл политики
grant
операторы могут теперь дополнительно включать одно или более полей Principal. Включение поля Principal указывает, что у пользователя или другого объекта, представленного указанным Принципалом, выполняя указанный код, есть определяемые полномочия.
Таким образом, основной формат a grant
оператор теперь
grant <signer(s) field>, <codeBase URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; .... permission perm_class_name "target_name", "action"; };где каждое подписывающее лицо, кодовая база и поля Principal является дополнительным, и порядок между полями не имеет значения.
Поле Principal похоже на следующее:
Principal Principal_class "principal_name"
Таким образом, это - слово "Principal" (где случай не имеет значения), сопровождаемый (полностью определенным) именем Принципала class и основное имя.
class Принципала является class, который реализует java.security. Основной интерфейс. У всех Объектов принципала есть связанное имя, которое может быть получено, вызывая их getName
метод. Формат, используемый для имени, зависит от каждой Основной реализации.
Тип Принципала, помещенного в Предмет, создаваемый механизмом аутентификации Kerberos, используемым этим учебным руководством, javax.security.auth.kerberos.KerberosPrincipal
, так, чтобы был тем, что должно использоваться в качестве Principal_class
часть нашего grant
Основное обозначение оператора. Имена пользователей для KerberosPrincipal
s имеют форму "name@realm". Таким образом, если имя пользователя является "mjones", и область "KRBNT-OPS.ABC.COM", полное principal_name
обозначение, чтобы использовать в grant
оператор "mjones@KRBNT-OPS.ABC.COM".
Возможно включать больше чем одно поле Principal в a grant
оператор. Если многократные поля Principal определяются, то полномочия в этом grant
оператор предоставляют, только если Предмет, связанный с текущим контекстом управления доступом, содержит все те Принципалы.
Чтобы предоставить тот же самый набор полномочий к различным Принципалам, создайте многократный grant
операторы, где каждый перечисляет полномочия и содержит единственное поле Principal, определяющее один из Принципалов.
Файл политики для этого учебного руководства включает тот grant
оператор с полем Principal:
grant codebase "file:./SampleAction.jar", Principal javax.security.auth.kerberos.KerberosPrincipal "your_user_name@your_realm" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "foo.txt", "read"; };где Вы занимаете место, Ваше имя пользователя Kerberos (завершитесь с и область) для"
your_user_name@your_realm
". Это определяет, что обозначенные полномочия предоставляют указанному принципалу, выполняющему код в SampleAction.jar
.
Чтобы создать и связать Предмет с контекстом управления доступом, Вы нуждаетесь в следующем:
doAs
метод от Предмета class нужно вызвать, передавая это аутентифицируемый Предмет и java.security. PrivilegedAction или java.security. PrivilegedExceptionAction. (См. API для Привилегированных Блоков для сравнения PrivilegedAction и PrivilegedExceptionAction.) doAs
метод связывает обеспеченный Предмет с текущим контекстом управления доступом и затем вызывает run
метод от действия. run
реализация метода содержит весь код, который будет выполняться как указанный Предмет. Действие таким образом выполняется как указанный Предмет. Помехи doAsPrivileged
метод от Предмета class можно вызвать вместо doAs
метод. В дополнение к параметрам, к которым передают doAs
, doAsPrivileged
требует третьего параметра: AccessControlContext. В отличие от этого doAs
, который связывает обеспеченный Предмет с текущим контекстом управления доступом, doAsPrivileged
связывает Предмет с обеспеченным контекстом управления доступом. См. doAs по сравнению с doAsPrivileged в Справочнике JAAS для сравнения тех методов.
Код для этого учебного руководства состоит из двух файлов:
JaasAcn.java
из учебного руководства по Аутентификации JAAS за исключением дополнительного кода должен был вызвать Subject.doAsPrivileged
.run
метод, который содержит весь код, мы хотим быть выполненными с Основанными на принципале проверками авторизации.JaasAzn.java является точно тем же самым как JaasAcn.java
код, используемый в предыдущем учебном руководстве кроме с тремя операторами, добавленными в конце main
метод, после того, как аутентификация делается. Эти операторы приводят к (1) ассоциация Предмета, представляющего аутентифицируемого пользователя с текущим контекстом управления доступом и (2) выполнение кода в run
метод SampleAction. Соединение Предмета с контекстом управления доступом включает секретным операциям безопасности в SampleAction run
метод (и любой код, который это вызывает прямо или косвенно), чтобы быть выполненным, если Принципалу, представляющему аутентифицируемого пользователя, предоставляют необходимые полномочия в текущей политике.
Как JaasAcn.java
, JaasAzn.java
инстанцирует LoginContext lc
и вызовы login
метод, чтобы выполнить аутентификацию. В случае успеха аутентифицируемый Предмет (который включает Принципал, представляющий пользователя) получается, вызывая LoginContext getSubject
метод:
Subject mySubject = lc.getSubject();
main
метод тогда вызывает Subject.doAsPrivileged
, передача этого аутентифицируемый Предмет mySubject
, PrivilegedAction (SampleAction) и a null
AccessControlContext, как описано в следующем.
SampleAction class инстанцируют через следующее:
PrivilegedAction action = new SampleAction();
Звонок Subject.doAsPrivileged
выполняется через:
Subject.doAsPrivileged(mySubject, action, null);
doAsPrivileged
метод вызывает выполнение run
метод в PrivilegedAction action
(SampleAction), чтобы инициировать выполнение остальной части кода, который, как полагают, выполняется от имени Предмета mySubject
.
Передача null
как AccessControlContext (треть) параметр doAsPrivileged
указывает на это mySubject
должен быть связан с новым пустым AccessControlContext. Результат состоит в том, что проверки безопасности, происходящие во время выполнения SampleAction, только потребуют полномочий для кода SampleAction непосредственно (или другой код, который это вызывает), работая как mySubject
. Отметьте что вызывающая сторона doAsPrivileged
(и вызывающие стороны на стеке выполнения в это время doAsPrivileged
был вызван), не требуют никаких полномочий, в то время как действие выполняется.
SampleAction.java содержит SampleAction class. Этот class реализации java.security.PrivilegedAction
и имеет a run
метод, который содержит весь код, мы хотим быть выполненными как Предмет mySubject
. Для этого учебного руководства мы выполним три операции, каждая из которых не может быть сделана, если коду не предоставили требуемые полномочия. Мы будем:
java.home
системное свойство,user.home
системное свойство, иfoo.txt
существует в текущем каталоге.Вот код:
import java.io.File; import java.security.PrivilegedAction; public class SampleAction implements PrivilegedAction { public Object run() { System.out.println("\nYour java.home property value is: " + System.getProperty("java.home")); System.out.println("\nYour user.home property value is: " + System.getProperty("user.home")); File f = new File("foo.txt"); System.out.print("\nfoo.txt does "); if (!f.exists()) System.out.print("not "); System.out.println("exist in the current working directory."); return null; } }
Конфигурационный файл входа в систему, используемый для этого учебного руководства, может быть точно тем же самым как используемым учебным руководством по Аутентификации JAAS. Таким образом мы можем использовать jaas.conf, который содержит только одну запись:
JaasSample { com.sun.security.auth.module.Krb5LoginModule required; };
Эту запись называют "JaasSample", и это - имя что оба наших учебных приложения JaasAcn
и JaasAzn
используйте, чтобы обратиться к этому. Запись определяет, что LoginModule, который будет использоваться, чтобы сделать пользовательскую аутентификацию, является Krb5LoginModule в com.sun.security.auth.module
пакет и что этот Krb5LoginModule обязан "успешно выполняться" для аутентификации, которую будут считать успешным. Krb5LoginModule успешно выполняется, только если имя и пароль, предоставленное пользователем, успешно используется, чтобы зарегистрировать пользователя в Kerberos KDC.
Это учебное руководство по авторизации содержит два класса, JaasAzn
и SampleAction
. Код в каждом class содержит некоторые секретные операции безопасности, и таким образом соответствующие полномочия требуются в файле политики для операций быть выполненными.
Основной метод JaasAzn
class делает две операции, для которых требуются полномочия. Это
doAsPrivileged
статический метод Предмета class.Создание LoginContext является точно тем же самым, как был сделан в учебном руководстве по аутентификации, и это таким образом нуждается в том же самом javax.security.auth.AuthPermission
разрешение с целью"createLoginContext.JaasSample
".
Чтобы вызвать doAsPrivileged
метод Предмета class, у Вас должен быть a javax.security.auth.AuthPermission
с целью"doAsPrivileged
".
Принятие JaasAzn
class помещается в названный файл JAR JaasAzn.jar
, эти полномочия можно предоставить JaasAzn
код через следующий grant
оператор в файле политики:
grant codebase "file:./JaasAzn.jar" { permission javax.security.auth.AuthPermission "createLoginContext.JaasSample"; permission javax.security.auth.AuthPermission "doAsPrivileged"; };
SampleAction
код делает три операции, для которых требуются полномочия. Это
foo.txt
существует в текущем каталоге.Полномочия, требуемые для этих операций, являются следующим:
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "foo.txt", "read";
Мы должны предоставить эти полномочия коду в SampleAction.class
, который мы поместим в названный файл JAR SampleAction.jar
. Однако, для этой детали grant
оператор, который мы хотим предоставить полномочиям не только к коду, но и определенному пользователю, выполняющему код, демонстрировать, как ограничить доступ к определенному пользователю.
Таким образом, как объяснено в том, Как Вы Делаете Основанные на принципале Операторы Файла Политики?, наш grant
оператор похож на следующее:
grant codebase "file:./SampleAction.jar", Principal javax.security.auth.kerberos.KerberosPrincipal "your_user_name@your_realm" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "foo.txt", "read"; };Вы заменяете своим именем пользователя Kerberos (полный и область) для"
your_user_name@your_realm
". Например, если бы Ваше имя пользователя является "mjones", и Ваша область "KRBNT-OPERATIONS.ABC.COM", Вы использовали бы "mjones@KRBNT-OPERATIONS.ABC.COM" (полный кавычек). Полный файл политики является jaasazn.policy.
Чтобы выполнить наш учебный код авторизации JAAS, все, что необходимо сделать,
jaasazn.policy
с Вашим именем пользователя и областью.SampleAction.java
и JaasAzn.java
: javac SampleAction.java JaasAzn.java
JaasAzn.jar
содержа JaasAzn.class
: jar -cvf JaasAzn.jar JaasAzn.class
SampleAction.jar
содержа SampleAction.class
: jar -cvf SampleAction.jar SampleAction.class
JaasAzn
приложение, определяя -classpath
пункт, что классы должны разыскиваться в JaasAzn.jar
и SampleAction.jar
Файлы JAR,-Djava.security.manager
то, что менеджер безопасности должен быть установлен,-Djava.security.krb5.realm=<your_realm>
то, что Ваша область Kerberos является определенной той.-Djava.security.krb5.kdc=<your_kdc>
то, что Ваш Kerberos KDC является определенным тем.-Djava.security.policy=jaasazn.policy
то, что файл политики, который будет использоваться, jaasazn.policy
, и-Djava.security.auth.login.config=jaas.conf
то, что конфигурационный файл входа в систему, который будет использоваться, jaas.conf
.Ниже полные команды, чтобы использовать и для Microsoft Windows и для систем Unix. Единственная разница - то, что на системах Windows Вы используете точки с запятой, чтобы разделить элементы пути к классу, в то время как Вы используете двоеточия с этой целью на системах Unix. Убедитесь, что заменили <your_realm>
с Вашей областью Kerberos, и <your_kdc>
с Вашим Kerberos KDC.
Вот полная команда для систем Windows:
java -classpath JaasAzn.jar;SampleAction.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=jaasazn.policy -Djava.security.auth.login.config=jaas.conf JaasAzn
Вот полная команда для систем UNIX:
java -classpath JaasAzn.jar:SampleAction.jar -Djava.security.manager -Djava.security.krb5.realm=<your_realm> -Djava.security.krb5.kdc=<your_kdc> -Djava.security.policy=jaasazn.policy -Djava.security.auth.login.config=jaas.conf JaasAzn
Введите полную команду на одной строке. Многократные строки используются здесь для четкости. Если команда является слишком длинной для Вашей системы, Вы, возможно, должны поместить это в.bat файл (для Windows) или.sh файл (для UNIX) и затем петлять, чтобы выполнить команду.
Вы будете запрошены Ваше имя пользователя Kerberos и пароль, и базовый механизм аутентификации Kerberos, определенный в конфигурационном файле входа в систему, зарегистрирует Вас в Kerberos. Если Ваш вход в систему будет успешен, то Вы будете видеть сообщение "Аутентификация, за которой следуют!" и в противном случае Вы будете видеть "Отказавшую Аутентификацию."
Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.
Как только аутентификация успешно завершается, остальная часть программы (в SampleAction
) будет выполняться от имени Вас, пользователя, требуя, чтобы Вы были предоставлены соответствующие полномочия. jaasazn.policy
файл политики предоставляет Вам необходимые полномочия, таким образом, Вы будете видеть дисплей значений Вашего java.home
и user.home
системные свойства и оператор относительно того, назвали ли Вам файл foo.txt
в текущем каталоге.