Сгенерировать токен с помощью провайдераJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сгенерировать токен с помощью провайдера

Сообщение Anonymous »

Для создания собственного токена авторизации у меня есть следующие требования:

Код: Выделить всё

universal-auth-key:FE-DP-0-570bb6ae-0-302d02150083da0fdf85b657d01f8530a54...dc349f15bc5aa9491

id: universal-auth-key
keyType: FE
keyAlias: DP
expiryTimeInHex: 0
issueTimeInHex: 530fbbro
keySequenceNumber: 0
signature: i3p8v71wbwiyrwm7q3r459hzcyqj4eh9vn7g8q1v0ppvtytuupwe6hh
Я пробовал это:

Код: Выделить всё

public KeyPair createKeyPair()
{
try {
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA", "BC");
keyPairGenerator.initialize(2048, new SecureRandom());

KeyPair keyPair = keyPairGenerator.generateKeyPair();

return keyPair;
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
throw new RuntimeException(e);
}
}

....

public X509Certificate createX509Certificate(KeyPair keyPair)
{
try {
// Define certificate details
X500Name issuer = new X500Name("CN=Test");
X500Name subject = new X500Name("CN=Test");
BigInteger serial = BigInteger.valueOf(System.currentTimeMillis());
Date notBefore = new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30);
Date notAfter = new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365 * 10));

// Generate a self-signed certificate
X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(issuer, serial, notBefore, notAfter, subject, keyPair.getPublic());

// Add Basic Constraints to mark this as a non-CA certificate
certBuilder.addExtension(org.bouncycastle.asn1.x509.Extension.basicConstraints, true, new BasicConstraints(false));

// Sign the certificate
ContentSigner signer = new JcaContentSignerBuilder("SHA1withDSA").setProvider("BC").build(keyPair.getPrivate());

// Convert to X509Certificate
X509Certificate certificate = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certBuilder.build(signer));

return certificate;
} catch (CertIOException | OperatorCreationException |
CertificateException e) {
e.printStackTrace();
}
return null;
}

.....
String x509CertificateAsString = Base64.getEncoder().encodeToString(x509Certificate.getEncoded());

......
String result = createBasicTokenPassword(keyPair.getPrivate(), createApiKeyParams.getUsername(), createApiKeyParams.getAlias());
.....

private String createBasicTokenPassword(PrivateKey privateKey, String username, String alias) {
try {
String data = String.format("FE-%s-%s-%s-%s",
alias,                           // keyAlias
generateTokenExpireTimeInHex(),  // expiryTimeInHex
generateTokenIssueTimeInHex(),   // issueTimeInHex
generateTokenSequenceNumber()   // keySequenceNumber
);
String privateKeySignature = certificateService.getPrivateKeySignature(privateKey, username + data);
String format = String.format("%s-%s",
data,
privateKeySignature);// signature
return BaseEncoding.base64().encode(format.getBytes(StandardCharsets.UTF_8));

} catch (Exception e) {
throw new RuntimeException(e);
}
}
В конце я возвращаю Base64.getEncoder().encodeToString(result.toString().getBytes());
Но когда я пытаюсь использовать этот токен генерации, я получаю в Spring Security следующую ошибку:

Код: Выделить всё

2024-09-23T18:40:48.654+03:00 DEBUG 23960 --- [microservice] [nio-8180-exec-1] o.s.s.w.a.www.BasicAuthenticationFilter  : Failed to process authentication request

org.springframework.security.authentication.ProviderNotFoundException:  No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:234) ~[spring-security-core-6.2.5.jar:6.2.5]
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:187) ~[spring-security-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.10.jar:6.1.10]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.5.jar:6.2.5]
at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.10.jar:6.1.10]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.2.5.jar:6.2.5]
at
Похоже, я вручную генерирую токен неправильно. Могу ли я использовать какую-нибудь библиотеку для правильной генерации токена?

Подробнее здесь: https://stackoverflow.com/questions/790 ... a-provider
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»