Java JWT[RSA],api所有者共享私钥

Java JWT[RSA],api所有者共享私钥,java,jwt,rsa,Java,Jwt,Rsa,因此,我必须为我们正在与一个客户机进行的集成编写一个Rest客户机 他们给了我们一个私钥,并告诉我们创建json负载的JWT。 关键: 问题: 共享私钥是否正确?是否有任何java示例可用于使用RSA创建JWT 礼貌- 不,共享私钥是不正确的。从不 它被称为“私人”是有原因的 在客户端创建令牌也是不正确的 这里唯一正确的事情是,您需要私钥对令牌进行签名,但这不是客户端的任务。它违背了JWT的全部目的,因为您可以在其中写入角色、过期时间等任何内容。似乎API所有者信任您,而且可能它是一个非公开的A

因此,我必须为我们正在与一个客户机进行的集成编写一个Rest客户机

他们给了我们一个私钥,并告诉我们创建json负载的JWT。 关键:

问题: 共享私钥是否正确?是否有任何java示例可用于使用RSA创建JWT

礼貌-


不,共享私钥是不正确的。从不 它被称为“私人”是有原因的

在客户端创建令牌也是不正确的

这里唯一正确的事情是,您需要私钥对令牌进行签名,但这不是客户端的任务。它违背了JWT的全部目的,因为您可以在其中写入角色、过期时间等任何内容。似乎API所有者信任您,而且可能它是一个非公开的API,但无论如何,我建议您以正确的方式进行操作。他们应该实现一个端点来请求令牌


使用示例通常可以在的网站上找到。

不,共享私钥是不正确的。从不 它被称为“私人”是有原因的

在客户端创建令牌也是不正确的

这里唯一正确的事情是,您需要私钥对令牌进行签名,但这不是客户端的任务。它违背了JWT的全部目的,因为您可以在其中写入角色、过期时间等任何内容。似乎API所有者信任您,而且可能它是一个非公开的API,但无论如何,我建议您以正确的方式进行操作。他们应该实现一个端点来请求令牌


通常可以在的网站上找到使用示例。

RSA密钥是公钥/私钥对。私钥可用于签名JWT,公钥可用于验证这些JWT的签名

私钥不应与任何人共享。这样做将允许随机的人访问您的客户端API


我在使用Nimbus与RSA签署JWT方面有很好的经验。您可以在这里看到一些示例:。

RSA密钥是公钥/私钥对。私钥可用于签名JWT,公钥可用于验证这些JWT的签名

私钥不应与任何人共享。这样做将允许随机的人访问您的客户端API

我在使用Nimbus与RSA签署JWT方面有很好的经验。你可以在这里看到一些例子:。

迟做总比不做好

共享私钥通常是个坏主意。但是让我们假设您拥有私钥,并且希望每次都使用它来生成密钥对

这里是一个如何使用存储在P12文件中的现有私钥的示例

@Test
public void readP12() {
    char[] keyStorePassword = "1234567890".toCharArray();
    try {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        InputStream keyStoreData = new FileInputStream(LOCATION + "\\keystore.p12");
        keyStore.load(keyStoreData, keyStorePassword);

        KeyStore.ProtectionParameter entryPassword = new KeyStore.PasswordProtection(keyStorePassword);
        KeyStore.Entry keyEntry = keyStore.getEntry("1", entryPassword);

        KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)
                keyStore.getEntry("1", entryPassword);
        PrivateKey privateKey = privateKeyEntry.getPrivateKey();
        PublicKey publicKey = privateKeyEntry.getCertificate().getPublicKey();

        String token = generateJwtToken(privateKey);
        System.out.println(token);
        printStructure(token, publicKey);
    } catch (Exception e) {
      // tbd
    }
}
你可以看到如何做到迟到总比不迟到好

共享私钥通常是个坏主意。但是让我们假设您拥有私钥,并且希望每次都使用它来生成密钥对

这里是一个如何使用存储在P12文件中的现有私钥的示例

@Test
public void readP12() {
    char[] keyStorePassword = "1234567890".toCharArray();
    try {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        InputStream keyStoreData = new FileInputStream(LOCATION + "\\keystore.p12");
        keyStore.load(keyStoreData, keyStorePassword);

        KeyStore.ProtectionParameter entryPassword = new KeyStore.PasswordProtection(keyStorePassword);
        KeyStore.Entry keyEntry = keyStore.getEntry("1", entryPassword);

        KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)
                keyStore.getEntry("1", entryPassword);
        PrivateKey privateKey = privateKeyEntry.getPrivateKey();
        PublicKey publicKey = privateKeyEntry.getCertificate().getPublicKey();

        String token = generateJwtToken(privateKey);
        System.out.println(token);
        printStructure(token, publicKey);
    } catch (Exception e) {
      // tbd
    }
}
你可以看看怎么做

@Test
public void readP12() {
    char[] keyStorePassword = "1234567890".toCharArray();
    try {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        InputStream keyStoreData = new FileInputStream(LOCATION + "\\keystore.p12");
        keyStore.load(keyStoreData, keyStorePassword);

        KeyStore.ProtectionParameter entryPassword = new KeyStore.PasswordProtection(keyStorePassword);
        KeyStore.Entry keyEntry = keyStore.getEntry("1", entryPassword);

        KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)
                keyStore.getEntry("1", entryPassword);
        PrivateKey privateKey = privateKeyEntry.getPrivateKey();
        PublicKey publicKey = privateKeyEntry.getCertificate().getPublicKey();

        String token = generateJwtToken(privateKey);
        System.out.println(token);
        printStructure(token, publicKey);
    } catch (Exception e) {
      // tbd
    }
}