使用vertx进行JWT公钥/私钥认证的握手

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

我创建了一个小的vertx auth-server,使用公钥/私钥签名/生成JWT令牌。

        PrivateKey privateKey = CertUtil.getPrivateKey("config/private_key.der");
        PublicKey publicKey = CertUtil.getPublicKey("config/public_key.der");

        // Create a JWT Auth Provider
        JWTAuth jwt = JWTAuth.create(vertx, new JWTAuthOptions()
                .setPubSecKeys(List.of(new PubSecKeyOptions()
                        .setAlgorithm("RS256")
                        .setPublicKey(Base64.getEncoder().encodeToString(publicKey.getEncoded()))
                        .setSecretKey(Base64.getEncoder().encodeToString(privateKey.getEncoded())))));
        // protect the API
        router.route("/api/*").handler(JWTAuthHandler.create(jwt, "/api/new-token"));

        // this route is excluded from the auth handler
        router.get("/api/new-token").handler(ctx -> this.generateAndSendToken(ctx, jwt));

        // this is the secret API
        router.get("/api/protected").handler(ctx -> {
            ctx.response().putHeader("Content-Type", "text/plain");
            ctx.response().end("a secret you should keep for yourself...");
        });

        vertx.createHttpServer().requestHandler(router).listen(8080);

现在当我从客户端访问/ api / new-token时,我从上面的auth-server获得了一个JWT令牌。但是我有一些悬而未决的问题:

  • auth-server如何确保客户端具有服务器公钥并且它是真实的?
  • 客户端如何将公钥发送给auth-server?
  • 如何使/ api / new-token安全,以便只有合法的客户端可以连接到它?
java jwt rsa public-key-encryption vert.x
1个回答
0
投票

为什么不将此任务委托给KeyCloak开源身份和访问管理。它为您的应用添加了身份验证,并以最少的麻烦保护服务。

我们已经将它用于我们的项目中并且运行良好!

要使用Vert.x插入它,您可以按照这些tutos:

© www.soinside.com 2019 - 2024. All rights reserved.