Synchronní dešifrování souborů
Krok č. 1) Přihlášení
Pro přístup k API je nutné nejprve získat přístupový token pomocí koncového bodu pro přihlášení externího informačního systému pod identitou konkrétního uživatele.
Koncový bod: /api/sofa/v1/auth/extis/login-impersonate
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Content-Type: application/json
Parametry:
-
login … uživatelské jméno externího informačního systému.
-
password … heslo externího informačního systému.
-
impersonateUserId … LDAP identifikátor uživatele, jehož identitou má externí informační systém vystupovat (návod na zjištění tohoto identifikátoru je uveden v kapitole Postupy).
Příklad:
POST /api/sofa/v1/auth/extis/login-impersonate HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Content-Length: …
Content-Type: application/json
{
"login": "48a0ecdd540849f0af416307406467f0",
"password": "wau3S99vx2d_NW2P",
"impersonateUserId": "9e5f2f76-fff5-44c3-b943-06a95fdc08e2"
}
Výsledek:
{
"token": "eyJhbGciOiJBMjU2…"
}
Krok č. 2) Nahrání souborů
V dalším kroku je nutné nahrát dokumenty jeden po druhém do výchozího úložiště (default) pomocí koncového bodu File API. Výsledkem bude seznam identifikátorů souborů použitý v dalším kroku.
Koncový bod: /api/sofa/v2/file?storeId=default
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Authorization: Bearer <token>
-
Content-Type: multipart/form-data
Parametry:
-
file … soubor dokumentu
Ve verzi 2.0 se již nepoužívá hlavička FileId s parametry kódovanými ve formátu JSON, ale přenáší se standardní cestou pro upload souborů podle RFC 2854, tzn. že se název souboru uvádí v hlavičce Content-Disposition, velikost souboru v hlavičce Content-Length a typ souboru v hlavičce Content-Type.
Příklad:
POST /api/sofa/v2/file?storeId=default HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Authorization: Bearer eyJhbGciOiJBMjU2…
Content-Length: …
Content-Type: multipart/form-data; boundary="-----086735ab-f408-405e-9628-4eb525d56d71"
-------086735ab-f408-405e-9628-4eb525d56d71
Content-Disposition: form-data; name="file"; filename="Document.pdf"
Content-Length: …
Content-Type: application/pdf
…binary file content…
-------086735ab-f408-405e-9628-4eb525d56d71--
Výsledek:
{
"fileId": "eyJhbGciOiJIUzI1…"
}
Krok č. 3) Spuštění GraphQL mutace
Pro dešifrování dokumentů je nutné zavolat koncový bod GraphQL API s mutací pro dešifrování souborů, které předáme identifikátor dokumentu a parametry dešifrování. Výsledkem je identifikátor dešifrovaného dokumentu. Aktuálně jsou podporované následující parametry:
-
fileId … identifikátor souboru.
-
algorithmId … identifikátor algoritmu, např. SHA-256 nebo SHA-512 (výchozí hodnota: SHA-256).
-
certificateId … identifikátor certifikátu (HSM ID).
-
certificatePIN … PIN certifikátu.
Koncový bod: /api/sofa/v1/graphql
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Authorization: Bearer <token>
-
Content-Type: application/json
GraphQL operace:
mutation decryptFile($file: Signing_DecryptOperationParameters!) {
signing {
decryptFile(file: $file)
}
}
Příklad:
POST /api/sofa/v1/graphql HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Authorization: Bearer eyJhbGciOiJBMjU2…
Content-Length: …
Content-Type: application/json
{
"operationName": "decryptFile",
"query": "mutation decryptFile(\n $file: …",
"variables": {
"file": {
"fileId": "eyJhbGciOiJIUzI1…",
"algorithmId": null,
"certificateId": "3fbc87f3-f5fb-4211-934a-881b76ca52b6-x3x",
"certificatePIN": "12345"
}
}
}
Výsledek:
{
"data": {
"signing": {
"decryptFile": "eyJhbGciOiJIUzI1…"
}
}
}
Krok č. 4) Stažení souborů
Posledním krokem je stažení dešifrovaných souborů jeden po druhém pomocí koncového bodu File API:
Koncový bod: /api/sofa/v2/file
Metoda: GET
Hlavičky:
-
Authorization: Bearer <token>
Parametry:
-
fileId … identifikátor stahovaného dokumentu.
Příklad:
GET /api/sofa/v2/file?fileId=eyJhbGciOiJIUzI1…
Host: sofaws.602.cz
Authorization: Bearer eyJhbGciOiJBMjU2…
Výsledek:
Výsledkem je stahovaný dokument.
Název souboru lze získat buď standardně z hlavičky Content-Disposition, nebo File API v2 nastavuje pro snazší zpracování hlavičku X-Sofa-FileName. |