JWT [RSA], владелец API поделился закрытым ключом - PullRequest
1 голос
/ 19 апреля 2020

Так что мне нужно написать клиент Rest для интеграции, над которой мы работаем, с одним из наших клиентов.

Они дали нам закрытый ключ и сказали нам создать JWT из полезной нагрузки json. Ключ:

"-----BEGIN RSA PRIVATE KEY-----\nYYYYYYYYYYYYYYYYYYYYYYYYYYYYY edited ..YYYYY==\n---

--END RSA PRIVATE KEY-----\n"

Вопрос: Правильно ли использовать закрытый ключ, есть ли java пример, который я могу использовать для создания JWT с использованием RSA?

Предоставлено - https://wstutorial.com/misc/jwt-java-public-key-rsa.html

public String generateJwtToken(PrivateKey privateKey) {
        String token = Jwts.builder().setSubject("adam")
                .setExpiration(new Date(2018, 1, 1))
                .setIssuer("info@wstutorial.com")
                .claim("groups", new String[] { "user", "admin" })
                // RS256 with privateKey
                .signWith(SignatureAlgorithm.RS256, privateKey).compact();
        return token;
    }

Ответы [ 2 ]

3 голосов
/ 19 апреля 2020

Нет, разделять закрытый ключ некорректно. Никогда. По какой-то причине он называется private .

Также неправильно создавать токен на стороне клиента.

Единственная правильная вещь в том, что вам понадобится закрытый ключ для подписи токена, но это не является задачей клиента. Это наносит ущерб всей цели JWT, потому что вы можете написать в него (например, роли, срок действия), что вы хотите. Кажется, владелец API доверяет вам, и, вероятно, это API, который не публикуется c, но в любом случае, я бы порекомендовал сделать это правильно. Они должны реализовать конечную точку для запроса токена.

Примеры использования обычно можно найти на веб-сайтах библиотек jwt .

2 голосов
/ 19 апреля 2020

Ключи RSA являются открытыми c / парами закрытых ключей. Закрытый ключ можно использовать для подписи JWT, а ключ publi c можно использовать для проверки подписи этих JWT.

Закрытый ключ не должен передаваться кому-либо еще. Это позволило бы случайным людям получить доступ к вашему клиентскому API.

У меня был хороший опыт использования Nimbus для подписания JWT с RSA. Вы можете увидеть некоторые примеры здесь: https://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-signature.

...