私のアプリケーションがフロントエンドアプリケーションからJWTトークンを受け取ったときにKeyCloakで認証されているときに、エラーが継続的に発生しています。私が得ているエラーは、「十分でないか、あまりにも多くのセグメント」です。私の知る限りでは、トークンは有効なトークンであり、検証できるはずですが、この非常に一般的なエラーを越えることはできません。誰かが私が間違ってやっていることを助けてくれますか?Vert.x JWTセグメントが不十分または多すぎる
ここには、問題のあるコードのスニペットがあります。トークンを生成するためにvert.x JWTAuthプロバイダを使用し、私のテストケースを実行しているときに、同じコードが正常に動作していることに注意してください:ここで
JWTAuth authProvider = JWTAuth.create(vertx, new JWTAuthOptions(new JsonObject()
.put("permissionsClaimKey", "realm_access/roles")
.put("pubSecKeys", new JsonObject()
.put("publicKey", "vcVtWG5Qcz9gTMrDPfJSWNAiXsyCyBmNIzjtfHhBDX-l60KHyFaGBGBjRNkzDysV6pr6drQR8zRD8ePo8q73KDbXlZohXkR_J-gXer8H5EyWGl7KAATmKvuiYYv89f_C6f3NYUgfyKn6wzUtlsZN1CYpGmbnfLZYUcGzwvWWkddqQUroRrsf305Z17Pioegd_JMhcdprC1caOCuJHe46bYlu4_9m_MSPvBUCqjqAUIDZpB8HT9xrwxlwKG_Er6l-7TvQ32jp0wPxitLpEUg9noAt5w2NXIX44PCSkOdtGxGpj7fhyfivi_HQEfTq3Y4N2BRWAQxXYRaHlgl08CIsLb5rgJXmh8O7506V0THyLcJZ3pTn0u_4KxedOTsEbM_07W8kNCXVQrTIn4Zkyz42geRfblAzjvScP962DzEqu28WVZXWUyJIeQA_z3UM0l-MpQFtFDHsb0inQdeBfA6IN_eRp-JZaoMKLfswUEXjEj6nytKnwOEaqdqq56uPPK1j7QorIjMyn9VztH1WbbWM_JNPNc5CDAjFxo54tvrzqKkxLNbR1lP8g5GbIBeGSRc36IXQEp2hV42i3Pu-7bPJ_E0m9vr5dePjeRotthDUR7osmhOlzqHrLq1uzUYYneK37j7lLMx7N67rkWWMBa3v0h57pVD9ufAd-BxHiQzZL2U")
.put("type", "RS256"))));
...
versionOneAPI.route().handler(ctx -> {
String authHeader = ctx.request().getHeader("Authorization");
String encodedToken = authHeader.substring(authHeader.indexOf(' ')+1);
LOGGER.debug("Got the token {}", encodedToken);
authProvider.authenticate(new JsonObject().put("jwt", encodedToken), res -> {
LOGGER.debug("Request received for: {}", ctx.request().path());
if (res.succeeded()) {
LOGGER.debug("Got the user {} from the token", res.result().principal().getString("name"));
ctx.setUser(res.result());
ctx.response().putHeader(CONTENT_TYPE, APPLICATION_JSON.toString());
ctx.next();
}
else {
LOGGER.error("Failed to parse token with {} segments", encodedToken.split("\\.").length, res.cause());
ctx.response().setStatusCode(UNAUTHORIZED.code()).setStatusMessage(UNAUTHORIZED.reasonPhrase()).end();
}
});
});
は、失敗を示すログからのサンプルです:
15:22:14.930 [main] DEBUG groovyx.net.http.RESTClient - POST http://localhost:8080/rest/v1/referrals 15:22:15.069 [vert.x-eventloop-thread-0] DEBUG com.redhat.rhambassador.MainVerticle - トークンを取得しました図6 YmU4NS0zY2JkZDA0YTg2ZmQiLCJleHAiOjE1MTEzNjk0NTAsIm5iZiI6MCwiaWF0IjoxNTExMzY5MTUwLCJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tL2F1dGgvcmVhbG1zL0VtcGxveWVlSURQIiwiYXVkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIsInN1YiI6ImUwYzc4MTY5LTMyYWUtNDQ1Yy05YWYxLWUwYmVlYjI2YTgxNCIsInR5cCI6IkJlYXJlciIsImF6cCI6Imh0dHBzOi8vZXhhbXBsZS5jb20iLCJub25jZSI6ImY4MjYzNDU5LWJlYTgtNGQzMi04ODBjLTcxNGNhMjdiMGM2NSIsImF1dGhfdGltZSI6MTUxMTM2NjY0Niwic2Vzc2lvbl9zdGF0ZSI6IjVlYTgyMTA3LTI0MWMtNGViMy04MWY3LWU4ZmMxM2E3MWQ5MSIsImFjciI6IjAiLCJjbGllbnRfc2Vzc2lvbiI6IjA1MzUxYjU4LTcyODItNDgxZS1iMjk2LTFjNDExYjUzMmI2NCIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwczovL2V4YW1wbGUuY29tIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJFbXBsb3llZSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJ2aWV3LXByb2ZpbGUiXX19LCJsYXN0TmFtZSI6IkRvZSIsImZpcnN0TmFtZSI6IkpvaG4iLCJlbXBsb3llZVR5cGUiOiJFbXBsb3llZSIsIm5hbWUiOiJKb2huIERvZSIsInJoYXRVVUlEIjoiMTc5YmY0MTYtY2ZhNy0xMWU3LTkxNGUtNTRlZTc1OTMyOTU1IiwicHJlZmVycmVkX3VzZXJuYW1lIjoiamRvZSIsImdpdmVuX25hbWUiOiJKb2hu IiwiZmFtaWx5X25hbWUiOiJEb2UiLCJlbWFpbCI6Impkb2VAZXhhbXBsZS5jb20ifQ == ZWmsuIRsXeSdE_xefG_o-vYUZR4os_87jgd-7s9BC_-w1bHJ4K3tAIH3r_SxFS1hOYRxO3wsKniePkhcgfyHKDPpvSNc-HLsx3guARDGsdRiqEgszSoJTYvU_XRVcR8FEPPDs0vIov540A9mPPqpH4MPVK-dgZHH5IaSWpceeA91wmL5dh3Z-0nK5wIeFxDw-8PfzSzrF0crTG8Mr9KwaTr9iCTYta13kxIW3WU8xHe6qSYaQEJmKpj4y6YNtwdGvmVn9B9TngSBRliz-4nDj-WcVuWahkppSnuRgEEDsxFZ5DXvnKhK5j1aaU4HSamz7qd2UsgPya7DxpBHHIhcOp0fOzVcDJl4vm_zxnX7cO5Ulm4Vsn-Q5iFMHunXwtNkmxGxQrqWz24CYWF_CxMvcHgjK9pqGeJ6S43v2jQvTPA5dL6dcEhNOd6RH3dD7PJjhXN5b0MP-McjoJXoktnvNRLim_n2Dnsn-t3ceJhJVMqoYPvRd_F51Is1Rcuy3qzNRYtoeiHAkacHIzR5UxPheYtzyo0dtxz9dtHgd-WlWFFL4GyxRb5Ex6153JAZSK4neT4gAXldnSQqqDGHt1XZaeBR4G3l5bffozPuYCR9wDwtkNMI5VK5Q9o81mXdQen0DPt4XZgtSkQOoudNduZFhOy6GIzJAbiNifqJpOyud64 15:22:15.070 [vert.x-イベントループスレッド0] DEBUG com.redhat.rhambassador.MainVerticle - 受け取ったリクエスト: /rest/v1/referral 15:22:15.072 [vert.x-eve ntloop-thread-0]エラー com.redhat.rhambassador.MainVerticle - 3 セグメントのトークンを解析できませんでした。java.lang.RuntimeException:セグメントが不足または多すぎます io.vertx.ext.jwt.JWT.decode com.redhat.rhambassador.MainVerticle.lambda $ buildRoutes $ 7 AT io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.authenticate(JWTAuthProviderImpl.java:114) (MainVerticle.javaでJWT.java:321): でio.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:101でio.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:223) ) における197) io.vertx.ext.web.impl.RoutingContextWrapper.next(RoutingContextWrapper.java:149) io.vertx.ext.web.handler.impl.BodyHandlerImpl $ BHandler.endで io.vertx.ext.web.handler.impl.BodyHandlerImpl $ BHandler.doEnd(BodyHandlerImpl.java:209) (BodyHandlerImplで。Javaの:187) でio.vertx.ext.web.handler.impl.BodyHandlerImpl.lambda $は で$ 0(BodyHandlerImpl.java:68) を扱うio.vertx.core.http.impl.HttpServerRequestImpl.handleEnd(HttpServerRequestImpl .java:418) io.vertx.core.http.impl.ServerConnection.handleLastHttpContent(ServerConnection.java:475で) io.vertx.core.http.impl.ServerConnection.handleContentで(ServerConnection.java:469 ) でio.vertx.core.http.impl.ServerConnection.processMessage(ServerConnection.java:449) でio.vertx.core.http.impl.ServerConnection.handleMessage(ServerConnection.java:156) でio .vertx.core.http.impl.HttpServerImpl $ ServerHandlerWithWebSockets.handleMessage(HttpServerImpl.java:705) でio.vertx.core.http.impl.HttpServerImpl $ ServerHandlerWithWebSockets.handleMessage(HttpServerImpl.java:614) IOで .vertx.core.net.impl.VertxHandler.lambda $ channelRead $ 1(VertxHandler.java:150) at io.vertx.core.impl.ContextImpl.lambda $ wrapTask $ 2(ContextImpl.java:342) at io。 vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:200) でio.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:148) io.netty.channel.AbstractChannelHandlerContextで 。 invokeChannelRead(AbstractChannelHandlerContext.java:362) でio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) でio.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) io.netty.handler.codec.ByteToMessageDecoderで io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)で.fireChannelRead io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)で(ByteToMessageDecoder.java:310) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) でio.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) io.netty.channel.AbstractChannelHandlerContextで io.netty.channel.DefaultChannelPipeline $ HeadContext.channelRead(DefaultChannelPipeline.java:1359) で.invokeChannelRead(AbstractChannelHandlerContext.java:362) でio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) でio.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:935) でio.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read(AbstractNioByteChannel.java:134) でio.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) でio.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) io.netty.channelで.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) io.netty.util.concurrent.SingleThreadEventExecutorの$ 5.runでio.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)(SingleThreadEventExecutorで 。 java:858) at java.lang.Thread.run(スレッド。Javaの:748)
の認証をしますか? –
私は3.5.0を使用しています – Brandon