FIM 2.0
Popis projektu
Aplikace slouží k přihlašení ke keycloaku a poskytovaní tokenu, zobrazení uživatelů, vytváření nových uživatelů, upravovaní uživatelů a deaktivaci a aktivici uživatele. Aplikace je napsaná v Pythonu a využívá knihovny FastAPI python-keycloak.
Spuštění aplikace
poetry shell
poetry install
uvicorn app.main:app --reload
Synchronizace s REDIS
Synchronizace keycloaku s Redisem je vždy naplánována na 3h ráno.
Práva
Uživatelské práva
- Uživatelská práva fungují pouze pro frontend aplikace FIM.
| System | Název | Práva |
|---|---|---|
| admin | Admin | Uživatel má práva na vše v aplikaci. |
| org_admin | Správce organizace | Uživatel má právo manipulovat s uživateli pouze v rámci jeho organizace. |
Aplikační práva
- potřeba vytvořit nový client, který bude zabezpečený a potřeba mu přiřadit scopes s právy
| Právo | popis |
|---|---|
| users:create | Právo vytvářet uživatele. |
| users:read | Právo číst uživatele. |
| users:disable | Právo zneaktivnit uživatele |
| users:enable | Právo zaktivnit uživatele |
| users:update | Právo aktualizovat uživatele |
| users:password | Právo resetovat heslo uživatele |
| users:groups | Právo manipulovat se skupinami uživatele |
| users:roles | Právo manipulovat s rolemi uživatele |
| users:permissions | právo manipulovat s právy uživatele |
| groups:read | Právo číst skupiny |
| roles:read | Právo číst role |
| clients:read | Právo číst klienty |
| logs:read | Právo číst uživatelský log |
| organizations:read | Právo číst organizace |
| organizations:create | Právo vytvořit organizaci |
| organizations:disable | Právo zneaktivnit organizaci |
| organizations:enable | Právo zaktivnit organizaci |
| organizations:search | Právo vyhledávat organizaci |
Autentizace a Autorizace
Pro autentizaci uživatele slouží Keycloak, který na základě přihlašovacích údajů vrátí token, který z FrontEndu chodí v každém dotazu na API. Autorizaci obstarává autorizační modul v API, který na základě ověřeného tokenu zjišťuje práva uživatele a na základě toho mu povoluje nebo zakazuje manipulaci s endpointy.
Generovaní tokenu
- Je potřeba vygenerovat token pro klienta pomocí keycloak tokenu.
curl -X POST https://keycloak.example.com/realms/myrealm/protocol/openid-connect/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=myclient" \
-d "client_secret=mysecret"
Využité technologie
- fastapi==^0.115.8
Knihovna pro vytvoření API. https://fastapi.tiangolo.com/
- pydantic==^2.10.6
Knihovna pro validaci dat. https://docs.pydantic.dev/latest/
- toml==^0.10.2
Knihovna pro práci s konfiguračním souborem. https://pypi.org/project/toml/
- python-keycloak==^5.3.1
Knihovna pro připojení ke keycloaku a jeho následnout manipulací. https://python-keycloak.readthedocs.io/en/latest/
- aiosmtplib==^4.0.1
Knihovna pro asynchronní odesílání emailů. https://pypi.org/project/aiosmtplib/
- sqlalchemy==^2.0.41
Knihovna pro práci s databází. https://www.sqlalchemy.org/
- redis==^6.2.0
Knihovna pro práci s redisem. https://pypi.org/project/redis/
- ldap3==^2.9.1
Knihovna pro práci s ldapem, který pracuje s AD. https://ldap3.readthedocs.io/en/latest/