GitHub

Uwierzytelnianie niskiego poziomu

Metody endpointów auth raw, kontrakty sekwencji token i XAdES oraz wiązanie tokenów z SDK.

Na tej stronie

Użyj low-level uwierzytelniania, gdy inny system posiada podpis, szyfrowanie tokenu albo politykę pollingu. Raw authentication używa schema-native modeli odpowiedzi, dopóki jawnie nie zmapujesz tokenów z powrotem do publicznego modelu SDK.

Metody endpointów

MetodaTransportZwracaDo czego służy
client.raw.auth.challenge()nieuwierzytelnionyspec.AuthenticationChallengeResponseUtworzenie challenge dla tokenu albo XAdES.
client.raw.auth.token_auth(body)nieuwierzytelnionyspec.AuthenticationInitResponseStart uwierzytelniania tokenem KSeF przez InitTokenAuthenticationRequest.
client.raw.auth.xades_auth(signed_xml, verify_chain=False)nieuwierzytelnionyspec.AuthenticationInitResponseWysłanie podpisanego zewnętrznie XML XAdES.
client.raw.auth.auth_status(bearer_token, reference_number)tymczasowy bearer authspec.AuthenticationOperationStatusResponsePolling statusu operacji uwierzytelniania.
client.raw.auth.redeem_token(bearer_token)tymczasowy bearer authspec.AuthenticationTokensResponseWymiana tymczasowego tokenu auth na access i refresh token.
client.raw.auth.refresh_token(bearer_token)refresh bearerspec.AuthenticationTokenRefreshResponseOdświeżenie access tokenu.
auth.raw.auth.list_sessions(...)uwierzytelnionyspec.AuthenticationListResponseLista sesji uwierzytelnienia.
auth.raw.auth.terminate_current_session()uwierzytelnionyNoneZamknięcie bieżącej sesji uwierzytelnienia.
auth.raw.auth.terminate_auth_session(reference_number)uwierzytelnionyNoneZamknięcie innej sesji po referencji.

Klienci async mają te same nazwy metod i wymagają await dla wywołań sieciowych.

Sekwencja token authentication

KrokWywołanie albo obiektZachowaj
Utwórz challengeclient.raw.auth.challenge()challenge.challenge, challenge.timestampMs
Pobierz certyfikat do szyfrowania tokenuclient.raw.encryption.fetch_public_certificates()certyfikat z usage KsefTokenEncryption
Zaszyfruj payload tokenuencrypt_token(ksef_token, str(challenge.timestampMs), cert.certificate)zaszyfrowany payload tokenu
Zbuduj requestspec.InitTokenAuthenticationRequest(...)challenge, contextIdentifier, encryptedToken, publicKeyId
Rozpocznij operacjęclient.raw.auth.token_auth(request)init.authenticationToken.token, init.referenceNumber
Pollingclient.raw.auth.auth_status(...)końcowy status
Redeemclient.raw.auth.redeem_token(init.authenticationToken.token)schema-native odpowiedź access/refresh
Powiąż z SDKclient.authentication.resume(AuthenticationResumeState.from_tokens(auth_mapper.from_spec(raw_tokens)))AuthenticatedClient

Sekwencja XAdES z podpisem zewnętrznym

KrokWywołanie albo obiektZachowaj
Utwórz challengeclient.raw.auth.challenge()payload challenge dla systemu podpisu
Podpisz poza SDKHSM, gateway albo zewnętrzny signerpodpisany XML jako bajty
Rozpocznij operacjęclient.raw.auth.xades_auth(signed_xml, verify_chain=True)init.authenticationToken.token, init.referenceNumber
Pollingclient.raw.auth.auth_status(...)końcowy status
Redeemclient.raw.auth.redeem_token(init.authenticationToken.token)schema-native odpowiedź access/refresh
Powiąż z SDKclient.authentication.resume(AuthenticationResumeState.from_tokens(auth_mapper.from_spec(raw_tokens)))AuthenticatedClient

Wiązanie raw tokenów

from ksef2.models import AuthenticationResumeState
from ksef2.raw.mappers import auth as auth_mapper

raw_tokens = client.raw.auth.redeem_token(init.authenticationToken.token)
auth_tokens = auth_mapper.from_spec(raw_tokens)
auth = client.authentication.resume(AuthenticationResumeState.from_tokens(auth_tokens))
python

Po powiązaniu możesz używać gałęzi workflow, takich jak auth.invoices, albo uwierzytelnionych gałęzi raw, takich jak auth.raw.invoices.

Kontrakt statusu pollingu

auth_status() używa tymczasowego tokenu auth jako bearer tokenu, nie finalnego access tokenu. Polluj, aż KSeF zwróci końcowy status uwierzytelniania, a potem wywołaj redeem_token() z tym samym tymczasowym tokenem.

Warunek statusuAkcja callera
Status sukcesuWymień tymczasowy token auth przez redeem_token().
Status błęduPrzerwij i pokaż kod/opis statusu.
Lokalny timeoutZapisz init.referenceNumber i zdecyduj, czy inny worker ma kontynuować polling.

Powiązana referencja