OAuth 2.0, OpenID Connect, Keycloak a Spring Boot 3 -- Roly používateľov a autor...
source link: https://novotnyr.github.io/scrolls/oauth-oidc-keycloak-spring-boot-3-roly/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
OAuth 2.0, OpenID Connect, Keycloak a Spring Boot 3
OAuth 2.0, OpenID Connect, Keycloak a Spring Boot 3 – Roly používateľov a autorizácia
2023/03/26
Roly (roles) umožňujú v Keycloaku pridávať používateľom ľubovoľné „nálepky“, z ktorých je potom možné odvodzovať rozličné druhy oprávnení (permissions).
Rolou je admin
, guest
, teller
, čokoľvek.
Ukážeme si:
-
Ako možno pridať rolu používateľovi v rámci clienta.
-
Ako v REST API (Spring Boot) vytiahnuť rolu.
-
Ako v REST API určiť autorizáciu: teda prístup k niektorému volaniu len pre vybrané roly.
Pridávanie roly
Vytváranie roly pre klienta megabank
Prihlásme sa do administrátorskej konzoly Keycloaku ako administrátorky (obvykle konto admin
).
Rolu môžeme vytvoriť buď pre celý realm alebo len pre konkrétneho klienta.
Skúsme vytvoriť pre našu megabanku z predošlých dielov rolu withdrawer
pre človeka, ktorý si dokáže vybrať peniaze.
V bloku Clients na karte Roles vytvorme novú rolu tlačidlom Create Role.
Použime názov roly (withdrawer
) a prípadný popis.
Rola je tým vytvorená a môžeme ju pridať používateľovi!
Pridanie roly používateľovi
V bočnej lište v sekcii Users
kliknime na používateľa harald
a pridajme mu rolu.
Na karte Role Mapping priraďme rolu tlačidlom Assign Role.
Uvidíme zoznam rolí — ale keďže ide o zoznam rolí celého realmu a nie klienta, musíme rolu vyhľadať cez textové pole — ale predtým ešte prepnime vo filtri možnosť na Filter by clients.
Vyberme rolu a priraďme ju používateľovi — a to je všetko!
Rola a tokeny JWT
Rola klienta sa automaticky objaví v tokene JWT. Skúsme spustiť klasické prihlásenie cez flow ROPC:
Po dekódovaní tokenu JWT uvidíme claim resource_access
:
Roly a Spring Security
Roly z tokenu JWT môžeme namapovať na roly v Spring Security.
Do aplikačného kontextu v Springu dodáme objekt typu Converter<Jwt, Collection<GrantedAuthority>> , ktorý zmení token JWT na zoznam autorít (rolí) v Spring Security.
|
Dodajme potom bean v podobne metódy:
1 | Autority v Spring Security budeme prevádzať pomocou nášho konvertéra. |
2 | Ako bonus vieme nastaviť meno principala z claimu, ktorý obsahuje meno používateľa namiesto jeho identifikátora UUID. |
Roly a autorizácie
Toto všetko môžeme skombinovať aj do overovania rolí pri volaní metód.
-
Zapneme podporu pre autorizáciu volania metód.
-
Dodáme nad metódu overovanie role.
Podpora pre autorizáciu volania metód
Od Spring Security 6.0 používame anotáciu @EnableMethodSecurity
.
V starších Spring Security bola štandardom anotácia @EnableGlobalMethodSecurity .
|
Teraz dodáme anotáciu @PreAuthorize
, ktorá sa spustí iba ak má používateľ rolu withdrawer
nastavenú v Keycloaku.
V opačnom prípade získame stavový kód 503 (Forbidden).
Roly v rámci realmu
Používateľovi môžeme priradiť aj globálnu rolu platnú pre celý realm, teda pre všetkých klientov.
Rolu potom pridáme v administrátorskej konzole v sekcii Realm Roles.
Tlačidlom Create Role vytvoríme rolu takým istým spôsobom ako v prípade roly pre konkrétneho klienta.
Vytvorme teda rolu creditor
Rolu priradíme používateľovi podobne ako v prípade roly klienta, ba dokonca ju automaticky uvidíme v zozname rolí a nemusíme ju vyhľadávať.
Roly realmu a JWT
Roly realmu sa objavia v tokene JWT na inom mieste, budú schované v claime realm_access
v podobe zanoreného JSONu.
Vidíme rolu creditor
a niekoľko implicitných systémových rolí.
Aj tieto roly vieme namapovať na roly / autority v Spring Security. Konverter bude vyzerať trochu inak:
Samozrejme, musíme sa rozhodnúť, ktorý konverter použijeme ako bean — či ten, ktorý vyťahuje roly z realmu alebo klienta.
Na domácu úlohu si môžeme implementovať kompozitný konverter, ktorý zlúči roly realmu s rolami _klienta. |
Všetko ostatné sa zachová: automaticky máme k dispozícii roly dostupné v @Secured
či @PreAuthorize
.
Repozitár
Zdrojové kódy pre celý repozitár sú na GitHube, v repozitári novotnyr/bank-restapi-oidc .
|
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK