Код: Выделить всё
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);
}
}
Но когда я пытаюсь использовать этот токен генерации, я получаю в 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
Мобильная версия