Μετάβαση στο περιεχόμενο

Authentication

Το Estia API τρέχει σε Keycloak (OAuth 2.0 / OIDC). Το backend σας παίρνει JWT μέσω client_credentials flow και το στέλνει σε κάθε call.

Flow overview

sequenceDiagram
    participant App as Your backend
    participant KC as Keycloak
    participant API as Estia API

    App->>KC: POST /token<br/>grant_type=client_credentials<br/>client_id + client_secret
    KC-->>App: access_token, expires_in
    App->>API: Request με Authorization: Bearer <token>
    API->>API: Validate signature, issuer, audience, expiry
    API-->>App: Response

Γιατί client_credentials

Machine-to-machine integration. Δεν υπάρχει end-user, οπότε client_credentials είναι το σωστό flow για server-side calls, scheduled jobs και internal services.

Πάρτε token

curl -X POST "https://auth.insurancegateway.gr/realms/estia/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=<your-client-id>" \
  -d "client_secret=<your-client-secret>"

Response:

{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "expires_in": 300,
  "token_type": "Bearer",
  "scope": "openid profile"
}

Token lifetime

Συνήθως 5 λεπτά έως 1 ώρα — εξαρτάται από το environment.

Στο client_credentials flow δεν υπάρχει refresh_token. Όταν πλησιάζει η λήξη, ζητάτε νέο.

Πρακτικά:

  • cache το token στη service layer
  • refresh λίγα λεπτά πριν λήξει
  • μη κάνετε refresh σε κάθε request

Έτσι μειώνετε traffic στο Keycloak και αποφεύγετε edge cases με tokens που λήγουν mid-flight.

JWT claims που σας ενδιαφέρουν

Claim Τι είναι
sub Service-account user ID
azp Το client_id σας — χρήσιμο για auditing/per-client limits
iss https://auth.insurancegateway.gr/realms/estia
aud estia-api
exp Expiry
iat Issued at
scope Granted scopes

Τι ελέγχει το API

  1. JWT signature
  2. Issuer
  3. Audience
  4. Expiry
  5. not before, αν υπάρχει

Σε αποτυχία → 401 Unauthorized.

Common auth failures

HTTP Σημασία Τι να ελέγξετε
401 Unauthorized Token λείπει, έληξε ή invalid Νέο token, σωστό header
401 invalid_token Signature/issuer/audience mismatch Realm config, token source
403 Forbidden Token OK αλλά λείπει permission Επικοινωνήστε για roles/scopes

Tip υλοποίησης

Το πιο συνηθισμένο λάθος: νέο token σε κάθε call. Βάλτε token caching από την αρχή.

Έτοιμα implementations σε Code samples.

Τα docs έχουν άλλο login

Το browser login για το Scalar είναι ξεχωριστό — μόνο για περιήγηση στο spec. Το integration σας συνεχίζει με τα service-account credentials.