Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Учебное руководство по Авторизации JAAS



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

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

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

Какова Авторизация JAAS?

Авторизация JAAS расширяет существующую архитектуру безопасности Java, которая использует политику безопасности, чтобы определить то, что права доступа предоставляют выполняющемуся коду. Та архитектура, представленная в Java 2 платформы, центральна кодом. Таким образом, полномочия предоставляют основанные на характеристиках кода: куда код прибывает из и подписывается ли он в цифровой форме и раз так кого. Мы видели пример этого в sampleacn.policy файл используется в учебном руководстве по Аутентификации JAAS. Тот файл содержит следующее:

grant codebase "file:./SampleAcn.jar" {

   permission javax.security.auth.AuthPermission 
                    "createLoginContext.Sample";
};

Это предоставляет код в SampleAcn.jar файл, расположенный в текущем каталоге, указанном разрешении. (Никакое подписывающее лицо не определяется, таким образом, не имеет значения, подписывается ли код или нет.)

Авторизация JAAS увеличивает существующие центральные кодом средства управления доступом с новыми центральными пользователем средствами управления доступом. Полномочия можно предоставить базируемые не только на том, что код выполняет, но также и на том, кто выполняет его.

Когда приложение использует аутентификацию JAAS, чтобы аутентифицировать пользователя (или другой объект такой как сервис), Предмет создается в результате. Цель Предмета состоит в том, чтобы представить аутентифицируемого пользователя. Предмет состоит из ряда Принципалов, где каждый Принципал представляет идентификационные данные для того пользователя. Например, у Предмета мог быть Принципал имени ("Сьюзен Смит") и Принципал Номера социального страхования ("987-65-4321"), таким образом отличая этот Предмет от других Предметов.

Полномочия можно предоставить в политике определенным Принципалам. После того, как пользователь аутентифицировался, приложение может связать Предмет с текущим контекстом управления доступом. Для каждой последующей проверенной в безопасности работы (локальный доступ к файлу, например), Среда выполнения Java автоматически определит, предоставляет ли политика необходимое разрешение только определенному Принципалу и если так, работа будет позволена, только если Предмет, связанный с контекстом управления доступом, содержит определяемый Принципал.

Как Выполняемая Авторизация JAAS?

Чтобы заставить авторизацию 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" (где случай не имеет значения), сопровождаемый (полностью определенным) именем Основного класса и основным именем.

Основной класс является классом, который реализует java.security. Основной интерфейс. У всех Объектов принципала есть связанное имя, которое может быть получено, вызывая их getName метод. Формат, используемый для имени, зависит от каждой Основной реализации.

Тип Принципала, помещенного в Предмет, создаваемый механизмом стандартной аутентификации, используемым этим учебным руководством, SamplePrincipal, так, чтобы был тем, что должно использоваться в качестве Principal_class часть нашего grant Основное обозначение оператора. Имена пользователей для SamplePrincipals имеют форму "имя", и единственное имя пользователя, принятое для этого учебного руководства, является "testUser", таким образом, principal_name обозначение, чтобы использовать в grant оператор является "testUser".

Возможно включать больше чем одно поле Principal в a grant оператор. Если многократные поля Principal определяются, то полномочия в этом grant оператор предоставляют, только если Предмет, связанный с текущим контекстом управления доступом, содержит все те Принципалы.

Чтобы предоставить тот же самый набор полномочий к различным Принципалам, создайте многократный grant операторы, где каждый перечисляет полномочия и содержит единственное поле Principal, определяющее один из Принципалов.

Файл политики для этого учебного руководства включает тот grant оператор с полем Principal:

grant codebase "file:./SampleAction.jar",
        Principal sample.principal.SamplePrincipal "testUser" {

   permission java.util.PropertyPermission "java.home", "read";
   permission java.util.PropertyPermission "user.home", "read";
   permission java.io.FilePermission "foo.txt", "read";
};

Это определяет, что обозначенные полномочия предоставляют указанному принципалу, выполняющему код в SampleAction.jar. (Отметьте: класс SamplePrincipal находится в sample.principal пакет.)

Как Вы Связываете Предмет с Контекстом Управления доступом?

Чтобы создать и связать Предмет с текущим контекстом управления доступом, Вы нуждаетесь в следующем:

Учебный Код Авторизации

Код для этого учебного руководства состоит из четырех файлов:

SampleLoginModule.java и SamplePrincipal.java файлы также использовались в учебном руководстве по Аутентификации JAAS, таким образом, они не описываются далее здесь. Другие исходные файлы описываются ниже.

SampleAzn.java

Как SampleAcn, класс SampleAzn инстанцирует LoginContext lc и вызовы login метод, чтобы выполнить аутентификацию. В случае успеха аутентифицируемый Предмет (который включает SamplePrincipal, представляющий пользователя) получается, вызывая LoginContext getSubject метод:

Subject mySubject = lc.getSubject();

После обеспечения пользователя некоторая информация о Предмете, такой как, какие Принципалы это имеет, main метод тогда вызывает Subject.doAsPrivileged, передача этого аутентифицируемый Предмет mySubject, PrivilegedAction (SampleAction) и a null AccessControlContext, как описано в следующем.

Класс SampleAction инстанцируют через следующее:

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.java содержит класс SampleAction. Этот класс реализации java.security.PrivilegedAction и имеет a run метод, который содержит весь код, мы хотим быть выполненными как Предмет mySubject. Для этого учебного руководства мы выполним три операции, каждая из которых не может быть сделана, если коду не предоставили требуемые полномочия. Мы будем:

Вот код:

package sample;

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. Таким образом мы можем использовать sample_jaas.config, который содержит только одну запись:

Sample {
  sample.module.SampleLoginModule required debug=true;
};

Эту запись называют "Демонстрационной", и это - имя что оба наших учебных приложения SampleAcn и SampleAzn используйте, чтобы обратиться к этому. Запись определяет, что LoginModule, который будет использоваться, чтобы сделать пользовательскую аутентификацию, является SampleLoginModule в sample.module пакет и что этот SampleLoginModule обязан "успешно выполняться" для аутентификации, которую будут считать успешным. SampleLoginModule успешно выполняется, только если имя и пароль, предоставленное пользователем, является тем, которое это ожидает ("testUser" и "testPassword", соответственно).

SampleLoginModule также определяет опцию "отладки", которая может быть установлена в true как показано. Если эта опция устанавливается в true, Выводы SampleLoginModule дополнительная информация о продвижении аутентификации.

Файл Политики

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

LoginModule, используемый этим учебным руководством, SampleLoginModule, также содержит работу, требующую разрешения.

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

Полномочия, Необходимые SampleAzn

Основной метод SampleAzn класс делает две операции, для которых требуются полномочия. Это

Создание LoginContext является точно тем же самым, как был сделан в учебном руководстве по аутентификации, и это таким образом нуждается в том же самом javax.security.auth.AuthPermission разрешение с целью"createLoginContext.Sample".

Чтобы вызвать doAsPrivileged метод Подчиненного класса, у Вас должен быть a javax.security.auth.AuthPermission с целью"doAsPrivileged".

Принятие SampleAzn класс помещается в названный файл JAR SampleAzn.jar, эти полномочия можно предоставить SampleAzn код через следующий grant оператор в файле политики:

grant codebase "file:./SampleAzn.jar" {
   permission javax.security.auth.AuthPermission 
                    "createLoginContext.Sample";
   permission javax.security.auth.AuthPermission "doAsPrivileged";
};

Полномочия, Необходимые SampleAction

SampleAction код делает три операции, для которых требуются полномочия. Это

Полномочия, требуемые для этих операций, являются следующим:

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 sample.principal.SamplePrincipal "testUser" {

   permission java.util.PropertyPermission "java.home", "read";
   permission java.util.PropertyPermission "user.home", "read";
   permission java.io.FilePermission "foo.txt", "read";
};

Полномочия, Необходимые SampleLoginModule

SampleLoginModule код делает одну работу, для которой требуются полномочия. Это нуждается в a javax.security.auth.AuthPermission с целью "modifyPrincipals", чтобы заполнить Предмет с Принципалом. Оператор предоставления является следующим:

grant codebase "file:./SampleLM.jar" {
    permission javax.security.auth.AuthPermission "modifyPrincipals";
};

Полный Файл Политики

Полный файл политики является sampleazn.policy.

Выполнение Учебного Кода Авторизации

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

  1. Поместите следующие файлы в каталог:
  2. Создайте подкаталог, названный "выборкой" того высокоуровневого каталога, и поместите следующее в это (отметьте, что классы SampleAzn и SampleAction находятся в названном пакете sample):
  3. Создайте подкаталог "демонстрационного" каталога и назовите его "модулем". Поместите следующее в это (отметьте, что класс SampleLoginModule находится в названном пакете sample.module):
  4. Создайте другой подкаталог "демонстрационного" каталога и назовите это "принципалом". Поместите следующее в это (отметьте, что класс SamplePrincipal находится в названном пакете sample.principal):
  5. В то время как в высокоуровневом каталоге, скомпилируйте все исходные файлы:
    javac sample/SampleAction.java sample/SampleAzn.java 
    sample/module/SampleLoginModule.java sample/principal/SamplePrincipal.java
    
    (Введите все это на одной строке.)
  6. Создайте названный файл JAR SampleAzn.jar содержа SampleAzn.class и MyCallbackHandler.class (Отметьте, что источники для обоих этих классов находятся в SampleAzn.java):
    jar -cvf SampleAzn.jar sample/SampleAzn.class 
    sample/MyCallbackHandler.class
    

    (Введите все это на одной строке.)

  7. Создайте названный файл JAR SampleAction.jar содержа SampleAction.class:
    jar -cvf SampleAction.jar sample/SampleAction.class
    
  8. Создайте файл JAR, содержащий SampleLoginModule.class и SamplePrincipal.class:
    jar -cvf SampleLM.jar sample/module/SampleLoginModule.class 
    sample/principal/SamplePrincipal.class
    
  9. Выполнитесь SampleAzn приложение, определяя
    1. соответствующим -classpath пункт, что классы должны разыскиваться в SampleAzn.jar, SampleAction.jar, и SampleLM.jar Файлы JAR,
    2. -Djava.security.manager то, что менеджер безопасности должен быть установлен,
    3. -Djava.security.policy==sampleazn.policy то, что файл политики, который будет использоваться, sampleazn.policy, и
    4. -Djava.security.auth.login.config==sample_jaas.config то, что конфигурационный файл входа в систему, который будет использоваться, sample_jaas.config.

    Ниже полные команды, чтобы использовать и для Microsoft Windows и для систем Unix. Единственная разница - то, что на системах Windows Вы используете точки с запятой, чтобы разделить элементы пути к классу, в то время как Вы используете двоеточия с этой целью на системах Unix.

    Вот полная команда для систем Windows:

    java -classpath SampleAzn.jar;SampleAction.jar;SampleLM.jar 
     -Djava.security.manager 
     -Djava.security.policy==sampleazn.policy 
     -Djava.security.auth.login.config==sample_jaas.config sample.SampleAzn
    

    Вот полная команда для систем UNIX:

    java -classpath SampleAzn.jar:SampleAction.jar:SampleLM.jar 
     -Djava.security.manager 
     -Djava.security.policy==sampleazn.policy 
     -Djava.security.auth.login.config==sample_jaas.config sample.SampleAzn
    

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

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

    Как только аутентификация успешно завершается, остальная часть программы (в SampleAction) будет выполняться от имени Вас, пользователя, требуя, чтобы Вы были предоставлены соответствующие полномочия. sampleazn.policy файл политики предоставляет Вам необходимые полномочия, таким образом, Вы будете видеть дисплей значений Вашего java.home и user.home системные свойства и оператор относительно того, назвали ли Вам файл foo.txt в текущем каталоге.


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