【问题标题】:Microprofile JWT web.xml returns 200 instead of 401Microprofile JWT web.xml 返回 200 而不是 401
【发布时间】:2020-03-08 02:19:37
【问题描述】:

我正在开发一个小型后端。为了保护我想使用 JWT 的东西。 我的技术栈是:Payara 和 Keycloak 幸运的是我找到了一个很棒的教程 (https://kodnito.com/posts/microprofile-jwt-with-keycloak/)

反对作者的建议,我想通过 web.xml 保护 /resources/* 下的所有端点。

这是我的 web.xml:

...
<security-constraint>
        <display-name>App-Name</display-name>
        <web-resource-collection>
            <web-resource-name>App-Name</web-resource-name>
            <description/>
            <url-pattern>/resources/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>mysimplerole</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <description/>
        <role-name>mysimplerole</role-name>
    </security-role>
...

到目前为止一切顺利。如果我向端点发送请求,例如http://localhost:8080/resources/test 我按预期收到了 401。

如果我将 @LoginConfig(authMethod = "MP-JWT") 添加到我的 JAXRSConfiguration.java 并再次调用端点。 我收到 200 但没有发送任何内容,我希望会出现 401。如果我在我的请求中添加一个 JWT-Token,那么 200 + 预期的内容就会显示出来。

TestResource.java:

@Path("test")
public class TestResource {

    @GET
    public Response test() {
        return Response.ok("HI").build();
    }
}

JAXRSConfiguration.java

@ApplicationPath("/resources")
@LoginConfig(authMethod = "MP-JWT")
public class JAXRSConfiguration extends Application {

}

所以问题是,如果没有/或无效令牌附加到请求中,我该怎么做才能收到 401?

【问题讨论】:

    标签: java jwt jax-rs payara microprofile


    【解决方案1】:

    您的 JAX-RS 配置类缺少用于指定应用程序中所有可用角色的 @DeclareRoles({ "mysimplerole", "USER" }) 注释。

    @ApplicationPath("/resources")
    @LoginConfig(authMethod = "MP-JWT")
    @DeclareRoles({ "mysimplerole", "USER" })
    public class JAXRSConfiguration extends Application {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 2021-07-28
      • 2021-04-04
      • 2020-08-28
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2017-10-26
      相关资源
      最近更新 更多