Настройка безопасности WIldfly и JavaEE с помощью Elytron - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь поближе познакомиться с настройкой безопасности Wildfly, и у меня возникли проблемы с пониманием связи между параметрами в конфигурациях на стороне сервера, таких как standalone.xml, и конфигурациях на стороне приложения, таких как web.xml и jboss-web.xml.

У меня есть несколько вопросов об этой конфигурации, основанной на примере безопасности сервлета Wildfly.Я уже опробовал его, и он работает, но некоторые вещи мне не ясны.

  1. Как я вижу, базовый тип аутентификации определен в фабрике аутентификации на стороне сервера и в файле web.xml на стороне приложения,Какой из них имеет приоритет.Обязательно ли объявлять его дважды.
  2. Имя области 'RealmUsersRoles'.Означает ли это один и тот же объект в конфигурациях на стороне сервера и в web.xml
  3. В идеальном случае я хочу получить объяснение взаимосвязи между всеми объектами безопасности, которые упомянуты в этой конфигурации.

Вот скрипт конфигурации JBoss CLI

# 1. Add the JDBC security realm creation
/subsystem=elytron/jdbc-realm=servlet-security-jdbc-realm:add(\
principal-query=[\
{sql="SELECT PASSWORD FROM USERS WHERE USERNAME = ?", data-source="MySQLDS", clear-password-mapper={password-index=1}},\
{sql="SELECT R.NAME, 'Roles' FROM USERS_ROLES UR INNER JOIN ROLES R ON R.ID = UR.ROLE_ID INNER JOIN USERS U ON U.ID = UR.USER_ID WHERE U.USERNAME = ?", data-source="MySQLDS", attribute-mapping=[{index=1, to=roles}]}])

# 2. Add a simple role decoder for the "roles" attribute mapping
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=roles)

# 3. Configure the servlet-security-quickstart security domain
/subsystem=elytron/security-domain=servlet-security-quickstart-sd:add(\
default-realm=servlet-security-jdbc-realm, \
realms=[{realm=servlet-security-jdbc-realm, role-decoder=from-roles-attribute}], \
permission-mapper=default-permission-mapper)

# 4. Configure the HTTP Authentication Factory
/subsystem=elytron/http-authentication-factory=servlet-security-quickstart-http-auth:add(\
http-server-mechanism-factory=global,\
security-domain=servlet-security-quickstart-sd,\
mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=RealmUsersRoles}]}])

# 5. Configure Undertow's application security domain
/subsystem=undertow/application-security-domain=servlet-security-quickstart:add(\
http-authentication-factory=servlet-security-quickstart-http-auth)

web.xml

<?xml version="1.0"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>RealmUsersRoles</realm-name>
    </login-config>
</web-app>

jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>servlet-security-quickstart</security-domain>
</jboss-web>

Вот ссылка на пример Wildfly, который я используюв качестве основы https://github.com/wildfly/quickstart/tree/master/servlet-security

Вот весь мой код, основанный на этом примере с некоторыми изменениями https://github.com/usharik/GeekBrainsJavaEE/tree/master/lesson8-security

1 Ответ

1 голос
/ 03 апреля 2019
  1. Вам необходимо настроить базовый тип аутентификации в конфигурации сервера, но не в web.xml
  2. Имя области не имеет значения.Он просто отображается в браузере, когда вы получаете 401 Unauthorized (заголовок WWW-Authenticate).Если имя пакета настроено в web.xml, оно используется, в противном случае используется имя из конфигурации сервера.
...