java - Microprofile JWT web.xml 返回 200 而不是 401

标签 java jwt jax-rs payara microprofile

我正在开发一个小型后端。为了确保这一点,我想使用 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 + 预期内容。

测试资源.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 {

}

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

最佳答案

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

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

}

关于java - Microprofile JWT web.xml 返回 200 而不是 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60583971/

相关文章:

java - 以编程方式配置 DropWizard

javascript - 如何从 Angular 中的其他函数访问工厂函数

oauth-2.0 - 如何使用 Google Auth JWT 授权登录用户? (图片)

gwt - Errai体验: user interface,交流,依赖注入(inject)

java - 为类路径设置文件夹

java - 以记事本方式打开 CSV 文件,然后看不到新行

java - 有没有办法在实现 @Path 的方法内部获得 REST Api 的完整 API 签名

jax-rs - WebApplicationException 未显示错误消息

java - 如何从 NumberPicker 中获取选中的数字?

go - 使用 jwt-go 库 - key 类型无效