191 lines
5.4 KiB
TeX
191 lines
5.4 KiB
TeX
\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} |