Authentikáció
A beépített authentikáció a közös Saml modulra és az Oraculum szolgáltatásra alapul.
Az élesítéshez az alábbi lépések szükségesek:
Ha minden jól sikerült akkor a app/Modules/Auth/Middlewares/AuthMiddleware aktiválódik minden hívásnál.
Ha szeretnél saját Auth Middleware-t alkalmazni, akkor egyszerűen írd át a settings / System / Authentication / classes / authMiddleware értéket a saját Middleware osztályoddal.
Ugyanígy lecserélheted a gyári User és Role classokat ha szükséges. A user_table beállítással lehet ráállítani a AuthMiddleware-t a helyi user táblára (alapból user a tábla név).
Az Auth beépítve tartalmazza mostmár (2021-11-08) a megszemélyesítés funkciót. Ehhez be kell állítanod a Permission Middleware elérhetőségét,illetve hogy milyen jogosultsággal szeretnéd kezelni ezt a feature-t.
Ha minden jól megy, akkor a https://URL/masquerade/EPPN url-en a rendszer fogadni fogja hogy kit szeretnél megszemélyesíteni és ha van hozzá jogod akkor az adott user nézetét fogod látni.
Az élesítéshez az alábbi lépések szükségesek:
- Tedd fel a simplesamlphp/simplesamlphp modult composerrel (composer require simplesamlphp/simplesamlphp )
- Portainerben indítsd újra a konténert, a környezet felismeri a Saml-t és aktiválja a szükséges symlinkeket
- Hozd létre a projektedet az Oraculum rendszerben (https://oraculum.dev.alfi.kifu.hu/)
- Létrehozáskor az Oraculum kiadja az alkalmazásod jelszavát, ezt mentsd le mert később nem tudod kikérni a rendszertől
- Hozz létre jogosultságokat és csoportokat (opcionális)
- A projektedben aktiváld az Auth, Pdo és Saml System dependencyket
- Állítsdbe az OraculumApi kapcsolódást a settings / System / API / oraculum részen, a jelszó kivételével minden mást le tudsz kérni az Oraculumból
- Állítsd be az URN prefixet a settings / System / Authentication részen, ugyanitt tudod megadni a publikus URL-eket
- A működéshez a Middleware keresni fogja a default PDO kapcsolatot és a user táblát!!! A user táblában az eppn az elsődleges kulcs (a default auto increment id mellett)!
Ha minden jól sikerült akkor a app/Modules/Auth/Middlewares/AuthMiddleware aktiválódik minden hívásnál.
Ha szeretnél saját Auth Middleware-t alkalmazni, akkor egyszerűen írd át a settings / System / Authentication / classes / authMiddleware értéket a saját Middleware osztályoddal.
Ugyanígy lecserélheted a gyári User és Role classokat ha szükséges. A user_table beállítással lehet ráállítani a AuthMiddleware-t a helyi user táblára (alapból user a tábla név).
Az Auth beépítve tartalmazza mostmár (2021-11-08) a megszemélyesítés funkciót. Ehhez be kell állítanod a Permission Middleware elérhetőségét,illetve hogy milyen jogosultsággal szeretnéd kezelni ezt a feature-t.
Ha minden jól megy, akkor a https://URL/masquerade/EPPN url-en a rendszer fogadni fogja hogy kit szeretnél megszemélyesíteni és ha van hozzá jogod akkor az adott user nézetét fogod látni.
Minta settings.php saját Role class implementációval
Példa a kiterjesztett Role class implementációra, egyedül a checkPermissionInUserRoles definiáljuk újra.
xxxxxxxxxx
1
2
'Authentication' => [
3
'classes' => [
4
'authMiddleware' => '\App\Modules\Auth\Middlewares\AuthMiddleware',
5
'userClass' => '\App\Modules\Auth\Classes\User',
6
'roleClass' => '\App\Classes\ExtendedRole',
7
'permissionMiddlewareClass' => '\App\Modules\Auth\Middlewares\BlankMiddleware',
8
'setMasqueradeRole' => 'YOUR_APPLICATION:masquerade'
9
],
10
'user_table'=>'front_user',
11
'urn' => [
12
'prefix' => 'urn:geant:niif.hu:niif:'
13
],
14
'passthrough' => [
15
'/cron',
16
'/healthcheck'
17
]
18
],
19
Példa a kiterjesztett Role class implementációra, egyedül a checkPermissionInUserRoles definiáljuk újra.
xxxxxxxxxx
1
2
3
namespace App\Classes;
4
5
use App\Modules\System\Auth\Classes\Role;
6
7
class ExtendedRole extends Role
8
{
9
private function checkPermissionInUserRoles($perm = array(), $userid = null)
10
{
11
foreach ($perm as $key => $item) {
12
$perm[$key] = $this->settings['urn']['prefix'] . $item;
13
}
14
15
// Get user roles
16
$userRoles = $this->getRoles($userid);
17
18
// SAML eduPersonEntitlement
19
if ($this->roleObj) {
20
$userRoles = array_merge($this->roleObj, $userRoles);
21
}
22
23
// Core Developer special
24
if (!in_array($this->settings['urn']['prefix'] . 'iir:developer', $perm)) {
25
array_push($perm, $this->settings['urn']['prefix'] . 'iir:admin'); // Godlike role
26
}
27
28
return (bool) array_intersect($perm, $userRoles);
29
}
30
}
31
32
Szükséges SQL
Az authentikáció használja a lokális user táblát hogy a későbbiekben lehessen eseményeket / objektumokat rendelni a userekhez.
xxxxxxxxxx
1
CREATE TABLE `user` (
2
`id` int(11) NOT NULL,
3
`eppn` varchar(128) COLLATE utf8_hungarian_ci NOT NULL,
4
`name` varchar(128) COLLATE utf8_hungarian_ci NOT NULL,
5
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
6
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci;
7