# adfs-auth-ms Jednoduchy REST wrapper pro transparentní proxy volání s ADFS autentizací. ## Co dela - nacte konfiguraci z YAML - vytvori `client_assertion` (JWT) podepsany privatnim klicem - zavola ADFS token endpoint pomoci `private_key_jwt` autentizace - slouzi jako transparentni proxy: prepisuje prichozi pozadavky na backend a pridava `Authorization: Bearer ` - automaticky rotuje `clientIds` pri obdrzeni HTTP 429 (throttling) od backendu - drzi access token v pametove cache, dokud nevyprsi - vystavi endpointy `/process`, `/health` ## Konfigurace Konfigurace je v `config/config.yaml` nebo ve classpath `config.yaml`. Sekce `adfs`: - `tokenUrl`: URL ADFS token endpointu - `audience`: Audience pro JWT (vetsinou stejne jako tokenUrl) - `resource`: Identifier resourse (napr. `urn:kamma:api`) - `clientIds`: Seznam povolenych Client ID pro rotaci - `certificate`: Base64 encoded X509 certifikat (pro ADFS) - `privateKey`: Base64 encoded private key (pro podpis JWT) - `proxyHost`, `proxyPort`, `proxyUser`, `proxyPassword`: Volitelna proxy pro volani ADFS - `trustStore`: Cesta k JKS truststoru (pro SSL důvěru k ADFS a backendu) - `trustStorePassword`: Heslo k truststoru Ostatni: - `backendUrl`: Cilkova URL backendu, kam se proxy forwarduje - `server.port`: Port, na kterem microservice posloucha (default 8080) ## TrustStore Aplikace používá vlastní TrustStore pro SSL spojení. Do TrustStoru byly přidány: - Certifikát ADFS (přímo z konfigurace) - Root autorita Let's Encrypt - Všechny standardní veřejné autority ze systému Soubor s TrustStorem je nakonfigurován v `config.yaml` pod klíčem `trustStore`. ## Spusteni ```bash mvn package java -jar target/adfs-auth-ms-1.0-SNAPSHOT.jar ``` ## API - `GET /health` - Kontrola stavu sluzby - `ANY /process/**` - Proxy endpoint, ktery prida ADFS token a forwarduje na `backendUrl` ### Ukázka volání Pokud je `backendUrl` nastaven na `https://calc.kamma.cz/add`, volání přes proxy vypadá takto: ```bash # Volání sečtení x=10 a y=20 přes lokální proxy curl "http://localhost:8080/process/add?x=10&y=20" ``` Proxy automaticky: 1. Získá platný token z ADFS (pomocí jedné z nakonfigurovaných identit). 2. Přidá hlavičku `Authorization: Bearer `. 3. Přepošle dotaz na backend. 4. Vrátí odpověď z backendu zpět klientovi.