Microprofile JWT 一直响应 401

Microprofile JWT responding with 401 all the time

我在尝试让 Microprofile JWT 为我的 REST 资源工作时遇到问题。

我能够构建 JWT,因此在 jwt.ie 上解码时它是

{
  "kid": "Oh1YDQopers_qYMU4zQCmAf0UsFVD5D0NmkFE79s2q0",
  "typ": "JWT",
  "alg": "RS256"
}
{
  "token_type": "Bearer",
  "sub": "user12",
  "upn": "user12",
  "groups": [
    "ADMIN",
    "USER"
  ],
  "jti": "a27582fc-21e2-4365-b485-ed7193606d8b",
  "iss": "http://www.testissuer.com",
  "exp": 1617226928,
  "iat": 1617219728
}

我的申请 class 带有

注释
@LoginConfig(authMethod = "MP-JWT")
@DeclareRoles({"USER", "SUPERUSER", "ADMIN"})
@ApplicationPath("/")
public class MyApplication extends Application {

资源 class 被注释为

@Path("/my")
@PermitAll
@RequestScoped
public class MyResource {
    @Inject
    @Claim(standard = Claims.groups)
    private Set<String> groups;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @RolesAllowed("USER")
    public String getString() {
        if (groups != null) {
            return "groups.size(): " + groups.size();
        }
        else {
            return "groups is null";
        }
    }
}

包含此 war 的 ear 文件包含一个 META-INF/microprofile-config.properties 文件,其条目为:

mp.jwt.verify.issuer=http://www.testissuer.com

为了测试这一点,我正在生成一个新令牌并将授权 header 设置为编码的 JWT 并调用返回 401 响应的 GET /my。在编码令牌之前添加 Bearer 没有区别。 401 响应中的 WWW-Authenticate header 看起来像是在寻找基本领域值。

如果我取出 @RolesAllowed("USER") 行,那么我得到的响应是“groups is null”所以这就像注入失败或无法映射到 JWT 中的“groups”声明.

有人运行以前参与过这个吗?

@PermitAll 资源 class 上的注释是错误的,使用它可以防止主体数据被注入。解决方法是在 class 上使用 @DenyAll 并在方法级别使用 @RolesAllowed 或 @PermitAll。