\section{Autorizáció} \begin{frame}{Mi az autorizáció?} \begin{block}{Definíció} Meghatározza, hogy egy azonosított felhasználó milyen erőforrásokhoz férhet hozzá és milyen műveleteket végezhet. \end{block} \begin{itemize} \item \textbf{Kérdés:} Mit tehetsz? \item \textbf{Cél:} Jogosultságok szabályozása \item \textbf{Eredmény:} Engedélyezett vagy tiltott művelet \end{itemize} \begin{alertblock}{Fontos!} Autorizáció az authentikáció után történik. \end{alertblock} \end{frame} \begin{frame}{Autorizációs modelljei} \begin{enumerate} \item \textbf{RBAC (Role-Based Access Control)} \begin{itemize} \item Szerepkörök alapján \item Példa: Admin, Editor, User \end{itemize} \item \textbf{ABAC (Attribute-Based)} \begin{itemize} \item Attribútum alapján (user, resource, context) \item Példa: "Department = IT és 9-17 között" \end{itemize} \item \textbf{ACL (Access Control List)} \begin{itemize} \item Erőforrás-szintű lista \item Példa: fájlrendszer jogosultságok \end{itemize} \end{enumerate} \end{frame} \begin{frame}{RBAC - Szerepkör alapú} \begin{block}{Lényege} Felhasználók szerepköröket kapnak, ez határozza meg a jogosultságokat. \end{block} \begin{columns} \begin{column}{0.48\textwidth} \textbf{Előnyök:} \begin{itemize} \item Könnyű adminisztráció \item Átlátható \item Gyors ellenőrzés \end{itemize} \end{column} \begin{column}{0.48\textwidth} \textbf{Hátrányok:} \begin{itemize} \item Skálázhatóság \item Kevesebb rugalmasság \end{itemize} \end{column} \end{columns} \end{frame} \begin{frame}{ABAC - Attribútum alapú} \begin{block}{Lényege} Hozzáférési szabályok attribútumok alapján. \end{block} \begin{itemize} \item \textbf{User:} szerepkör, osztály, beosztás \item \textbf{Resource:} tulajdonos, típus \item \textbf{Context:} idő, hely, eszköz \end{itemize} \begin{exampleblock}{Példa szabály} \texttt{(role=Manager) AND (resource.owner = user) AND (time < 18:00)} \end{exampleblock} \end{frame} \begin{frame}{ACL - Access Control List} \begin{block}{Lényege} Erőforrásonként tárolt lista a hozzáférési jogokról. \end{block} \begin{itemize} \item \textbf{Példa:} fájlrendszer (read, write, execute) \item \textbf{Előny:} finém hozzáférés \item \textbf{Hátrány:} nagy rendszereknelnehéz kezelni \end{itemize} \end{frame} \begin{frame}{Autorizáció webalkalm azásban} \begin{block}{Tipikus folyamat} Szerver minden kérésnél ellenőrzi a jogosultságot. \end{block} \begin{enumerate} \item Authnentikáció után szerepkör kiosztás \item Tokenben vagy session-ben tárolás \item Middleware ellenőrzi a hozzáférést \item Nincs jog: \texttt{403 Forbidden} \end{enumerate} \begin{alertblock}{HTTP státuszkód} \texttt{401} = nincs auth, \texttt{403} = nincs jogosultság \end{alertblock} \end{frame} \begin{frame}[fragile,shrink=10]{Autorizációs middleware (RBAC)} \begin{exampleblock}{Egyszerű szerepkör ellenőrzés} \tiny \begin{verbatim} const authorize = (...roles) => { return (req, res, next) => { const { role } = req.user; // pl. JWT-ből if (!roles.includes(role)) { return res.status(403).json({ error: 'Forbidden' }); } next(); }; }; app.get('/admin', auth, authorize('Admin'), (req, res) => { res.json({ data: 'Admin content' }); }); \end{verbatim} \end{exampleblock} \end{frame} \begin{frame}[fragile,shrink=10]{Policy alapú autorizáció (ABAC)} \begin{exampleblock}{Szabály központú hozzáférés} \tiny \begin{verbatim} const canAccess = (user, resource) => { return user.department === resource.department && user.level >= resource.requiredLevel && new Date().getHours() < 18; }; app.get('/reports/:id', auth, async (req, res) => { const report = await getReport(req.params.id); if (!canAccess(req.user, report)) { return res.status(403).json({ error: 'Forbidden' }); } res.json(report); }); \end{verbatim} \end{exampleblock} \end{frame} \begin{frame}{Legkisebb jogosultság elve} \begin{block}{Principle of Least Privilege} Mindenki csak a feladatohoz szükséges minimális jogokat kapja. \end{block} \begin{itemize} \item Csökkenti a kockázatot \item Korlátozza a hibák hatását \item Egyszerűbb auditálás \end{itemize} \begin{alertblock}{Gyakori hiba} \textbf{Mindenki admin} = gyors fejlesztés, de veszélyes élesben! \end{alertblock} \end{frame} \begin{frame}{Autorizáció Best Practices} \begin{itemize} \item Minden érzékeny végpontot ellenőrizz \item Middleware vagy policy réteg \item Role/policy központi kezelés \item Logolás \item Admin funkciók külön kezelése \item RBAC + ABAC kombináció \end{itemize} \end{frame} \begin{frame}{Összefoglalás - Autorizáció} \begin{itemize} \item Autorizáció = hozzáférések és jogosultságok kezelése \item 401 vs 403: authentikáció hiánya vs jogosultság hiánya \item Fő modellek: RBAC, ABAC, ACL \item Middleware-ekkel megvalósítható a gyakorlatban \item Least Privilege elv alkalmazása \end{itemize} \vspace{0.5cm} \end{frame}