Dzień Dobry. Mam problem z nawiązaniem sesji interaktywnej za pomocą tokena.
Wyzwanie autoryzacjne przebiega pomyślniea o to rezultat:
{
"timestamp": "2023-10-04T18:58:03.180Z",
"challenge": "20231004-CR-D0EBF4B212-1A7A3DCABF-DB"
}
Generuję za pomocą testowego klucza publicznego zaszyfrowany token:
private File publicKeyFile;
private String authorisationToken;
private Date authorisationChallengeRepsonseTimestamp;
public szyfrow() throws Exception {
publicKeyFile = new File(szyfrow.class.getResource("/publicKey.der").toURI());
authorisationToken = "F8A546A7DB3A88EC2D4F6A58C500386B7869CC64B7C0CC9CE88C19A2829AD7CD";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
authorisationChallengeRepsonseTimestamp = sdf.parse("2023-10-04T18:58:03.180Z");
}
@Test
public void test() throws IOException, InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] publicKeyFileBytes = Files.readAllBytes(publicKeyFile.toPath());
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKeyFileBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
byte[] message = (authorisationToken + "|" + authorisationChallengeRepsonseTimestamp.getTime()).getBytes(StandardCharsets.UTF_8);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] messageEncrypted = cipher.doFinal(message);
System.out.println(Base64.getEncoder().encodeToString(messageEncrypted));
}
}
Zaszyfrowany token:
PBngrH52jp7/iOH37iqcfwV0mRG//e9kQakdIQXwWPQXWKm82G1IWqAnRWjD3IwHVB1vo1vvIq78AqzTKO4MiJBmnpJikWSehGBOaZ5g5Fcm6Qi3+a05e+JS6dNateJsiXZdJ5WqWfzzzyOQOnL9wNDqeCkLkI0ymwfnW6VMp1AZbRkiLHOjN2/tNPwkxk7guHxF4O/cq4cVTP3r0Ul4jsBfd9c3DNywqr1ozzcXNXH7jtGRYe0iaN0sOuRFlrgNJbM+adguiDG0SLZsI08R4Jdy0vusrp8XtJAiXpVSyBBZ7Q5SB8XJ/Bc9b8dMq2JoBgzI4fhZBEcrKfBf+ZTdVA==
Wypełniam dokument xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:InitSessionTokenRequest
xmlns="http://ksef.mf.gov.pl/schema/gtw/svc/online/types/2021/10/01/0001"
xmlns:ns2="http://ksef.mf.gov.pl/schema/gtw/svc/types/2021/10/01/0001"
xmlns:ns3="http://ksef.mf.gov.pl/schema/gtw/svc/online/auth/request/2021/10/01/0001">
<ns3:Context>
<Challenge>20231004-CR-D0EBF4B212-1A7A3DCABF-DB</Challenge>
<Identifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubjectIdentifierByCompanyType">
<ns2:Identifier>6751555776</ns2:Identifier>
</Identifier>
<DocumentType>
<ns2:Service>KSeF</ns2:Service>
<ns2:FormCode>
<ns2:SystemCode>FA (1)</ns2:SystemCode>
<ns2:SchemaVersion>1-0E</ns2:SchemaVersion>
<ns2:TargetNamespace>http://crd.gov.pl/wzor/2021/11/29/11089/</ns2:TargetNamespace>
<ns2:Value>FA</ns2:Value>
</ns2:FormCode>
</DocumentType>
<Token>
PBngrH52jp7/iOH37iqcfwV0mRG//e9kQakdIQXwWPQXWKm82G1IWqAnRWjD3IwHVB1vo1vvIq78AqzTKO4MiJBmnpJikWSehGBOaZ5g5Fcm6Qi3+a05e+JS6dNateJsiXZdJ5WqWfzzzyOQOnL9wNDqeCkLkI0ymwfnW6VMp1AZbRkiLHOjN2/tNPwkxk7guHxF4O/cq4cVTP3r0Ul4jsBfd9c3DNywqr1ozzcXNXH7jtGRYe0iaN0sOuRFlrgNJbM+adguiDG0SLZsI08R4Jdy0vusrp8XtJAiXpVSyBBZ7Q5SB8XJ/Bc9b8dMq2JoBgzI4fhZBEcrKfBf+ZTdVA==</Token>
</ns3:Context>
</ns3:InitSessionTokenRequest>
Wysłam (korzystam ze Swaggera)
i otrzymuję błąd 20005, nieprawidłowo zaszyfrowana treść
Error: response status is 400
Response body
Download
{
"exception": {
"serviceCtx": "default",
"serviceCode": "20231004-EX-9C1410A9A4-FD5A0964A9-F4",
"serviceName": "online.session.session.token.init",
"timestamp": "2023-10-04T19:00:29.979Z",
"referenceNumber": "20231004-SE-465EF97C40-BA0DF84FFC-06",
"exceptionDetailList": [
{
"exceptionCode": 20005,
"exceptionDescription": "Nieprawidłowo zaszyfrowana treść."
}
]
}
}
Response headers
cache-control: no-cache
content-length: 347
content-type: application/json; charset=utf-8
date: Wed,04 Oct 2023 19:00:30 GMT
etag: W/"15b-RlOpeT92+alUi0slmMvbnn4pPw8"
expires: -1
server-timing: dtRpid;desc="-490089806",dtSInfo;desc="0"
status: 400 Bad Request
x-oneagent-js-injection: true
Co robię źle? Pozdrawiam