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。
我在尝试让 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。