GitHub

Metody uwierzytelniania

Zrozum uwierzytelnianie tokenem KSeF, XAdES, certyfikatem TEST i profilami w ksef2.

Na tej stronie

Uwierzytelnianie zamienia głównego Client albo AsyncClient w klienta uwierzytelnionego dla jednego kontekstu KSeF. Klient główny wybiera środowisko i posiada zasoby transportu. Metoda uwierzytelniania potwierdza, kto może działać w wybranym kontekście.

KSeF rozdziela dwa pojęcia, które łatwo pomylić:

PojęcieZnaczenie w KSeFPowierzchnia SDK
Kontekst logowaniaPodatnik albo podmiot, w imieniu którego będą wykonywane operacje.nip oraz context_type, na przykład context_type="nip".
Podmiot uwierzytelniającyToken albo tożsamość certyfikatowa, która potwierdza prawo wejścia w ten kontekst.ksef_token, albo cert i private_key.

Po udanym uwierzytelnieniu SDK zwraca AuthenticatedClient. Ten klient przechowuje access i refresh tokeny KSeF oraz udostępnia chronione gałęzie: sesje, faktury, tokeny, uprawnienia, certyfikaty, limity i historię sesji.

Client(Environment.TEST)
  -> client.authentication
    -> with_token(), with_xades(), with_test_certificate() albo with_profile()
      -> AuthenticatedClient dla jednego kontekstu KSeF
        -> sesje online, sesje batch, faktury
        -> tokeny, uprawnienia, certyfikaty, limity
text

Metody KSeF i pomocniki SDK

Na poziomie API KSeF uwierzytelnianie ma dwie główne rodziny:

Rodzina KSeFCo trafia do KSeFPomocnik SDK
Uwierzytelnianie XAdESPodpisany dokument XML AuthTokenRequest.with_xades()
Uwierzytelnianie tokenem KSeFToken KSeF zaszyfrowany aktualnym certyfikatem do szyfrowania tokenów.with_token()

SDK dodaje dwie warstwy wygody:

Pomocnik SDKCo dodaje
with_test_certificate()Generuje tymczasowy materiał certyfikatu TEST, a potem używa przepływu XAdES.
with_profile()Czyta lokalną konfigurację profilu ksef2-cli i wybiera token, certyfikat TEST, PEM XAdES albo PKCS#12 XAdES.

Wybierz metodę

MetodaKiedy jej używaćCo robi SDK
with_test_certificate()Pracujesz z Environment.TEST i chcesz najmniej konfiguracji.Generuje certyfikat TEST z NIP-u i uwierzytelnia się przez XAdES.
with_token()Aplikacja ma już token KSeF dla docelowego kontekstu.Pobiera certyfikat KSeF do szyfrowania tokenów, szyfruje token ze znacznikiem czasu challenge, rozpoczyna uwierzytelnianie tokenem, odpytuje status i pobiera tokeny.
with_xades()Aplikacja ma certyfikat i klucz prywatny dostępne w Pythonie.Buduje XML challenge KSeF, podpisuje go XAdES, wysyła podpisany XML, odpytuje status i pobiera tokeny.
with_profile()Chcesz, aby kod SDK i ksef2-cli współdzieliły nazwane lokalne ustawienia.Rozwiązuje wybrany profil i wywołuje odpowiednią metodę SDK.

Zobacz też:

  • Skonfiguruj uwierzytelnianie: Użyj wybranej metody w uruchamialnym kodzie SDK ze zmiennymi środowiskowymi i granicami sekretów.
  • Użyj profili: Współdziel lokalne ustawienia zgodne z CLI między przepływami terminalowymi i SDK.

Podmiot i kontekst przy XAdES

Przy uwierzytelnianiu XAdES SDK buduje i podpisuje żądanie XML dla kontekstu NIP przekazanego do with_xades(). KSeF odczytuje podmiot uwierzytelniający z certyfikatu użytego do podpisu: na przykład pieczęci firmowej, certyfikatu osobistego z NIP-em albo PESEL-em, certyfikatu KSeF do uwierzytelniania lub certyfikatu dopuszczonego przez uprawnienia na odcisk palca.

To znaczy, że nip jest kontekstem logowania, a nie zawsze identyfikatorem wbudowanym w certyfikat podpisujący. Osoba może uwierzytelnić się w kontekście firmy, jeśli KSeF widzi aktywne uprawnienia tej osoby albo certyfikatu.

Access tokeny odświeżają się same

Access tokeny KSeF są krótkotrwałe. Klient uwierzytelniony trzyma więc refresh token obok access tokenu i odnawia access token bez udziału Twojego kodu: krótko przed access_token_valid_until oraz raz po odpowiedzi 401, ponawiając nieudany request jednokrotnie. Współbieżne requesty współdzielą jedno odświeżenie.

Dotyczy to każdego sposobu uzyskania klienta uwierzytelnionego: metod logowania with_* oraz client.authentication.resume(state), które przyjmuje obiekt stanu albo jego ciąg JSON. Stan z wygasłym access tokenem działa, dopóki jego refresh token jest ważny. Uchwyty sesji wznowione przez state= używają tego samego klienta, więc też się odświeżają. auth.resume_state() i auth.auth_tokens zwracają bieżące tokeny, więc po długo trwającej pracy zapisz stan ponownie.

Gdy refresh token wygasł albo został odrzucony, klient rzuca KSeFAuthenticationExpiredError, podklasę KSeFAuthError. Aby kontynuować, uwierzytelnij się ponownie. Aby odświeżać tokeny samodzielnie, przekaż TransportConfig(auto_refresh_tokens=False). Dokładne reguły opisuje referencja operacji.

Profile są lokalną konfiguracją uwierzytelniania

with_profile() nie jest osobnym typem credentiala. To warstwa konfiguracji nad tymi samymi metodami uwierzytelniania:

Typ auth w profiluBezpośrednia metoda SDK
tokenwith_token()
test_certificatewith_test_certificate()
xades_pemwith_xades() z plikami certyfikatu i klucza PEM
xades_p12with_xades() z archiwum PKCS#12/PFX

Profil przechowuje niesekretne ustawienia, takie jak środowisko, NIP, typ uwierzytelniania, ścieżki certyfikatów, ustawienia pollingu i nazwę zmiennej środowiskowej zawierającej sekret. Nie powinien przechowywać wartości tokenów, haseł kluczy prywatnych ani haseł PKCS#12.

Kolejność wyboru profilu jest taka sama w SDK i CLI:

  1. Jawna nazwa profilu przekazana do with_profile("name").
  2. KSEF2_PROFILE.
  3. active_profile w lokalnej konfiguracji profili.

Środowisko klienta głównego musi zgadzać się ze środowiskiem wybranego profilu. Profil test używaj z Client(Environment.TEST), profil demo z Client(Environment.DEMO), a profil production z Client(Environment.PRODUCTION).

Cykl uwierzytelniania

  1. Klient główny pobiera challenge z wybranego środowiska KSeF.

  2. Wybrana metoda potwierdza tożsamość dla żądanego kontekstu.

    Uwierzytelnianie tokenem szyfruje token KSeF razem ze znacznikiem czasu z challenge. Uwierzytelnianie XAdES podpisuje XML challenge. Certyfikat TEST najpierw generuje materiał certyfikatu TEST. Profil odczytuje jedną z tych ścieżek z lokalnej konfiguracji.

  3. KSeF rozpoczyna asynchroniczną operację uwierzytelniania.

    SDK trzyma tymczasowy token operacji i numer referencyjny wewnętrznie, gdy odpytuje status.

  4. SDK zamienia zakończoną operację na access i refresh tokeny.

  5. Zwrócony AuthenticatedClient używa tych tokenów w chronionych operacjach SDK.

Klient asynchroniczny ma te same nazwy metod na AsyncClient; wywołuj je z await. Wybór między tokenem, certyfikatem TEST, XAdES i profilem pozostaje taki sam.

Co chronić

WartośćDlaczego jest ważna
Token KSeFMoże uwierzytelnić się w swoim kontekście do czasu cofnięcia albo wygaśnięcia.
Klucz prywatny i hasło certyfikatuMogą potwierdzić tożsamość używaną przez uwierzytelnianie XAdES.
Access tokenAutoryzuje chronione wywołania SDK, dopóki jest ważny.
Refresh tokenMoże pobrać nowy access token, dopóki jest ważny.
Stan wznowienia uwierzytelnieniaZawiera access i refresh tokeny potrzebne do odtworzenia klienta uwierzytelnionego.
Zserializowany stan sesjiMoże zawierać materiał szyfrowania sesji i URL-e uploadu potrzebne do wznowienia przepływu.

Trzymaj sekrety w zmiennych środowiskowych, menedżerach sekretów albo bezpiecznym magazynie aplikacji. Pliki profili ograniczaj do niesekretnych domyślnych ustawień i nazw zmiennych środowiskowych, które zawierają sekrety.

Uwierzytelnienie nie jest autoryzacją

Uwierzytelnienie potwierdza tożsamość dla kontekstu. Uprawnienia nadal określają, które operacje ta tożsamość może wykonać. Credential może uwierzytelnić się poprawnie, a potem nie mieć prawa do wysyłki faktur, metadanych, zarządzania tokenami albo nadawania uprawnień.

Powiązane strony

  • Uwierzytelnij się: Skonfiguruj zmienne środowiskowe, token, XAdES, certyfikaty TEST i profile.
  • Użyj profili: Współdziel lokalną konfigurację ksef2-cli z uwierzytelnianiem SDK i ProfileStore.
  • Low-level uwierzytelnianie: Wykonaj operację uwierzytelniania ręcznie, gdy inny system podpisuje XML albo obsługuje wymianę tokenów.
  • Uwierzytelnianie w CLI: Użyj tych samych metod uwierzytelniania z profilami w ksef2-cli.
  • Tokeny i uprawnienia: Zobacz, jak credentiale uwierzytelniające łączą się z chronionymi uprawnieniami.
  • XAdES: Zrozum podpis XML używany przy uwierzytelnianiu certyfikatem.