Рукопожатие в аутентификации открытого / закрытого ключа JWT с использованием vertx - PullRequest
1 голос
/ 22 марта 2019

Я создал небольшой auth-сервер vertx, который подписывает / генерирует токены 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 от клиента, я получаю токен JWT назадподписано с моего auth-сервера выше.однако у меня есть несколько открытых вопросов:

  • Как сервер аутентификации проверяет наличие у клиента открытого ключа сервера и является ли он подлинным?
  • Как клиент может отправить открытый ключ серверу авторизации?
  • Как сделать / api / new-token безопасным, чтобы к нему мог подключиться только законный клиент?

1 Ответ

0 голосов
/ 25 марта 2019

Почему бы вам не делегировать эту задачу на KeyCloak Управление идентификаторами и доступом с открытым исходным кодом. Он добавляет аутентификацию в ваше приложение и обеспечивает минимальную суету служб.

Мы использовали его в нашем проекте, и он работает довольно хорошо!

Чтобы подключить его к Vert.x, вы можете выполнить следующие действия:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...