为什么 Payara micro 中不使用 JWT 令牌进行授权

问题描述 投票:0回答:1

我在这里遵循了这个示例https://docs.payara.fish/community/docs/5.183/documentation/payara-server/public-api/openid-connect-support.html向我的应用程序添加身份验证和授权。但是,当我尝试使用授权标头中的 JWT 令牌(授权:Bearer ey...)调用应用程序时,它会失败并将我重定向回身份验证。

我的代码中有这个:

@ApplicationPath("/")
@OpenIdAuthenticationDefinition(
        providerURI = "https://my-idp.com/auth",
        clientId = "my-app-id",
        clientSecret = "my-app-secret",
        redirectURI = "http://localhost:8080/myapp/oauth2/callback",
        scope = "openid"
)
@DeclareRoles({"my_role"})
public class MyApp extends Application {

}

那么对于我的资源,我有:

@Path("/my")
@RequestScoped
public class TestResource {

    @Context
    SecurityContext securityContext;

    @GET
    @Path("resource")
    @Produces(MediaType.TEXT_PLAIN)
    @RolesAllowed("my_role")
    public String getName() {
        return securityContext.getUserPrincipal().getName();
    }
}

这是否意味着Payara micro上不提供此功能? 如果是这样,那么为什么授权部分会起作用?

java payara-micro
1个回答
0
投票

这是我最终为我的问题所做的解决方案。我必须实现这些接口作为解决方案:

自定义http认证机制:

@Default
@ApplicationScoped
@Path("oauth2")
public class CustomHttpAuthenticationMechanism implements javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism { ... }

自定义身份存储:

@javax.enterprise.context.ApplicationScoped
public class CustomIdentityStore implements javax.security.enterprise.identitystore.IdentityStore { ... }

自定义凭证:

class CustomTokenCredential implements javax.security.enterprise.credential.Credential { ... }

自定义主体:

public class CustomPrincipal extends javax.security.enterprise.CallerPrincipal implements javax.security.enterprise.credential.Credential { ... }
© www.soinside.com 2019 - 2024. All rights reserved.