当前位置: 首页 > 知识库问答 >
问题:

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

沈子实
2023-03-14

我创建了一个小型vertx auth服务器,它使用公钥/私钥签名/生成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-server如何确保客户端具有服务器公钥并且它是真实的?
  • 客户端如何向auth-server发送公钥?
  • 我怎样才能让 /api/new-token安全,只有合法的客户端可以连接到它?

共有1个答案

班展
2023-03-14

您为什么不将此任务委托给keydape一个开源身份和访问管理系统呢。它为你的应用程序添加身份验证,并以最小的麻烦保护服务。

我们已经将其应用到我们的项目中,效果非常好!

用Vert将其插入。x、 你可以跟着这些短裙走:

  • https://vertx.io/blog/vertx-3-and-keycloak-tutorial/
 类似资料:
  • 问题内容: 谁能给我sshj中的私钥/公钥身份验证示例? 在sshj中,等效的命令行是什么, 我试过了(省略了错误处理), 但在日志语句中,我看到了 谢谢 问题答案: 尝试KeyPairWrapper像这样使用: 使用BouncyCastle提供程序,您可以使用类似的方法从PKCS8 PEM(为混乱的代码道歉)中提取KeyPair。

  • 我明白JWT规范没有涵盖这一点:但我很想知道在实际的JWT使用中有哪些常见的做法。 当然,这个问题与HTTPS中涉及的证书无关:我只是在讨论JWT签名和加密中使用的密钥。

  • 我试图理解使用带有私钥/公钥(RS512)的JSON Web令牌的逻辑,当将从客户端(在本例中是React Native App)发送到服务器的数据有效载荷签名时。 我认为私钥/公钥的全部意义在于将私钥保持为私钥(在我的服务器上),并将公钥交给成功登录应用程序的人。 我认为,对于我的服务器的每个API请求,经过身份验证的应用程序用户将使用公钥创建JWT(在客户端),服务器将使用私钥验证来自API请

  • Auth0提供了两个JWT库,一个用于Node:Node jsonwebtoken,另一个用于Java:Java JWT。 我创建了私有/公钥对,并在Node中成功地使用了node-jsonwebToken: 但是我发现没有办法在java-jwtJava做同样的事情。 有人有一个如何在Java中为JWT使用私钥/公钥的工作示例吗?

  • 对示例代码中应用的概念“带RSA加密的JSON Web令牌(JWT)”有疑问 参见:http://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption 我的问题:为什么客户端使用私钥?为什么不在加密器上使用私钥,在解密器类上使用公钥呢? 欢迎对此RSA示例代码的概念方面进行澄清。

  • 我正在实施类似于:https://login.microsoftonline.com/common/discovery/v2.0/keys Spring boot JWT应用程序,用于生成和验证JWT令牌。我将生成许多公钥/私钥(我不想用一个密钥生成所有令牌。一个密钥对将生成生命周期较短的令牌,第二个密钥对将生成更长的令牌…)我将使用公钥创建endpoint/密钥。问题是:如何在我的应用程序中连接