Wildfly 8 Базовая Аутентификация

у меня есть Java-Webapp, работающий на Wildfly 8. Я пытаюсь защитить свой веб-сервис restful аннотациями resteasy. Я использую инструмент командной строки curl для тестирования REST api.

базовая настройка аутентификации, похоже, работает. Http-запросы к веб-сервисам с аннотацией "@PermitAll " работают нормально. Керл говорит:

~ % curl -v http://localhost:8080/ItilityServer-web/rest/account 
> GET /ItilityServer-web/rest/account HTTP/1.1
> User-Agent: curl/7.40.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/8
< Content-Length: 0
< Date: Wed, 28 Jan 2015 10:47:11 GMT
< 
* Connection #0 to host localhost left intact

но http-запросы, содержащие действительное имя пользователя и пароль, отклоняются с кодом состояния 401 не авторизован. Wildfly регистрирует ошибку пароль:

2015-01-28 11:42:43,565 TRACE [org.jboss.security] (default task-5) PBOX000263: Executing query SELECT a.password FROM Account a WHERE a.name = ? with username hans
2015-01-28 11:42:43,566 DEBUG [org.jboss.security] (default task-5) PBOX000283: Bad password for username hans

но это неправда. Расшифрованные данные авторизации "aGFuczpoZWxtaWhlbG1paGVsbWk=" - это hans: helmihelmihelmi, и это имя пользователя и пароль хранятся в моей БД. Те же jpql-запросы, что и домен безопасности, приводят к имя_пользователя "hans" и его паролю "helmihelmihelmi".

вот моя настройка:

web.в XML

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">

<context-param>
    <param-name>resteasy.role.based.security</param-name>
    <param-value>true</param-value>
</context-param>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Application</realm-name>
</login-config>

<security-role>
    <role-name>store</role-name>
</security-role>

</web-app>

(Я не знаю, что такое области безопасности, поэтому я просто оставил это свойство в login-config tag)

мой домен безопасности в автономном.в XML

<security-domain name="DBLogin" cache-type="default">
    <authentication>
        <login-module code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
            <module-option name="principalsQuery" value="SELECT a.password FROM Account a WHERE a.name = ?"/>
            <module-option name="rolesQuery" value="SELECT a.userRole FROM Account a WHERE a.name = ?"/>
            <module-option name="hashAlgorithm" value="SHA-256"/>
            <module-option name="hashEncoding" value="Base64"/>
            <module-option name="hashCharset" value="UTF-8"/>
            <module-option name="unauthenticatedIdentity" value="guest"/>
        </login-module>
    </authentication>
</security-domain>

Restful webservice

@GET
@RolesAllowed(AuthRole.STORE)
@Produces(MediaType.APPLICATION_JSON)
public Response getAccountByName() {
    Response.ResponseBuilder builder = Response.ok();
    return builder.build();
}

и импорт.xml для создания пользователя при запуске

insert into Account(id, name, email, password, user_role) values (0, 'hans', 'john.smith@mailinator.com', 'helmihelmihelmi', 'store') 
insert into Store(id, name, zipcode, street, housenumber, town, account_id) values(0, 'Edeka', 72622, 'stephanstraße', 10, 'Reudern', 0);

не знаю, как найти решение, потому что я даже не знаю проблему. Надеюсь, кто-то может помочь.

1 ответов


- вы не должны хранить незашифрованный пароль в базе данных. WildFly ожидает, что вы сохраните hashed пароль, используя хэш-алгоритм и кодировку, указанную в login-module конфигурации.

при создании нового Account используйте

org.jboss.security.auth.spi.Util.createPasswordHash()

для получения хэшированного пароля для хранения.

как правило, хранение сырья и пароли в безопасности.