首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >野生蝇8基本认证

野生蝇8基本认证
EN

Stack Overflow用户
提问于 2015-01-28 11:38:52
回答 1查看 6.7K关注 0票数 7

我在Wildfly 8上运行了一个Java-Webapp,我尝试用resteasy注释来保护我的restful with服务。我使用命令行工具curl测试rest。

基本身份验证设置似乎有效。Http对带有注释"@PermitAll“的work服务的请求可以正常工作。卷曲说:

代码语言:javascript
复制
~ % 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记录错误的不匹配密码:

代码语言:javascript
复制
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,这个用户名和密码存储在我的db中。与安全域使用的jpql查询相同,其结果是使用非服务器名"hans“和密码"helmihelmihelmi”。

在这里,我的设置:

web.xml

代码语言:javascript
复制
<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标签中)

我在standalone.xml中的安全域

代码语言:javascript
复制
<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

代码语言:javascript
复制
@GET
@RolesAllowed(AuthRole.STORE)
@Produces(MediaType.APPLICATION_JSON)
public Response getAccountByName() {
    Response.ResponseBuilder builder = Response.ok();
    return builder.build();
}

和import.xml在启动时创建用户。

代码语言:javascript
复制
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);

不知道如何找到解决办法,因为我甚至不知道问题所在。希望有人能帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 22:15:05

您不能将未加密的密码存储在数据库中。WildFly希望您使用哈希算法和在login-module配置中指定的编码来存储哈希密码。

创建新Account时,请使用

代码语言:javascript
复制
org.jboss.security.auth.spi.Util.createPasswordHash()

若要获取要存储的散列密码,请执行以下操作。

通常,存储原始密码是一种安全风险。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28191336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档