如果请求中包含授权,如何使用不允许开放资源的授权?

时间:2014-06-18 08:48:28

标签: authentication basic-authentication wildfly undertow

使用Wildfly 8.1.0.Final

我想创建一个Web应用程序,需要基本身份验证才能访问/ api / *,但应该打开应用程序的其余部分。为此,我有以下web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Api access</web-resource-name>
            <url-pattern>/api/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>api</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <role-name>api</role-name>
    </security-role>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Authentication requires api access</realm-name>
    </login-config>
</web-app>

使用浏览器进行测试,这可以按预期工作。

http://localhost:8080/myapp/api

...需要身份验证。

http://localhost:8080/myapp 

...不需要身份验证。

这是棘手的部分:

第三方访问/ myapp并在请求中包含授权标头:

Authorization: Basic ZGlsbDpkYWxs

这不是在wildfly中注册的用户,但这并不重要,因为/ myapp是开放的,并且不需要授权。但是会发生什么:

401 Unauthorized

为什么呢?我没有告诉我们对/ myapp使用任何安全约束,但它默认为我已经为/ myapp / api注册的安全限制

这是与underow一起引入的新行为,因为使用Jboss AS 7.1.1.Final这没有发生。

如果请求中包含授权,我如何告知承诺不对开放资源使用授权?

1 个答案:

答案 0 :(得分:0)

我可以通过WildFly 8.1.0.Final确认问题。在同一场景中,GlassFish 4.0不响应401。

我提交了一个问题: https://issues.jboss.org/browse/WFLY-3590