<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>MFA - Inero Software - Rozwiązania IT i Konsulting</title>
	<atom:link href="https://inero-software.com/pl/tag/mfa/feed/" rel="self" type="application/rss+xml" />
	<link>https://inero-software.com/pl/tag/mfa/</link>
	<description>Tworzymy cyfrowe innowacje</description>
	<lastBuildDate>Wed, 23 Apr 2025 12:15:46 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://inero-software.com/wp-content/uploads/2018/11/inero-logo-favicon.png</url>
	<title>MFA - Inero Software - Rozwiązania IT i Konsulting</title>
	<link>https://inero-software.com/pl/tag/mfa/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">153509928</site>	<item>
		<title>Konfiguracja logowania bezhasłowego za pomocą Passkey na urządzeniu mobilnym</title>
		<link>https://inero-software.com/pl/konfiguracja-logowania-bezhaslowego-za-pomoca-passkey-na-urzadzeniu-mobilnym/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Wed, 12 Mar 2025 09:02:00 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[bezhasłowe]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[logowanie]]></category>
		<category><![CDATA[logowanie wieloskładnikowe]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[mobilne]]></category>
		<category><![CDATA[Passkey]]></category>
		<category><![CDATA[urządzenia mobilne]]></category>
		<category><![CDATA[uwierzytelnianie wieloskładnikowe]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7555</guid>

					<description><![CDATA[<p>Ten wpis omawia konfiguracji Passkeys dla urządzeń mobilnych, zapewniając płynne i bezpieczne logowanie bez użycia hasła.</p>
<p>Artykuł <a href="https://inero-software.com/pl/konfiguracja-logowania-bezhaslowego-za-pomoca-passkey-na-urzadzeniu-mobilnym/">Konfiguracja logowania bezhasłowego za pomocą Passkey na urządzeniu mobilnym</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="7555" class="elementor elementor-7555" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-a40bff4 e-flex e-con-boxed e-con e-parent" data-id="a40bff4" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-8062b20 elementor-widget elementor-widget-html" data-id="8062b20" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-8e87fa0 elementor-widget elementor-widget-text-editor" data-id="8e87fa0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Nasz pierwszy wpis na temat Passkeys w Keycloak znajdziesz tu: <a href="https://inero-software.com/pl/wprowadzenie-do-passkey-w-keycloak/">Wprowadzenie do Passkeys w Keycloak</a></span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5dc3085 elementor-widget elementor-widget-text-editor" data-id="5dc3085" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>W naszym poprzednim wpisie pokazaliśmy, jak skonfigurować Passkeys w Keycloak, zastępując tradycyjne hasła uwierzytelnianiem opartym na WebAuthn. Omówiliśmy proces konfiguracji, kluczowe zalety oraz potencjalne ograniczenia. Ten wpis koncentruje się na konfiguracji Passkeys  dla urządzeń mobilnych, zapewniając płynne i bezpieczne logowanie bez hasła.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-618f1e8 elementor-widget elementor-widget-text-editor" data-id="618f1e8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tym wpisie ponownie omówimy konfigurację uwierzytelniania za pomocą Passkey w Keycloak, jednak tym razem wykorzystamy więcej niż jedno urządzenie.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9754353 elementor-widget elementor-widget-heading" data-id="9754353" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Korzystanie z Passkey przechowywanego na telefonie</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-f889420 elementor-widget elementor-widget-text-editor" data-id="f889420" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Podczas logowania na innym urządzeniu, takim jak laptop lub komputer stacjonarny, użytkownicy mogą uwierzytelnić się za pomocą Passkey przechowywanego na telefonie. Proces ten przebiega następująco:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-823577d elementor-widget elementor-widget-text-editor" data-id="823577d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ol>
    <li><strong>Wybór logowania za pomocą Passkey</strong>
        <p>Zamiast wprowadzać hasło, użytkownik wybiera opcję uwierzytelniania za pomocą Passkey. Przeglądarka na laptopie generuje żądanie uwierzytelnienia. Następnie należy nawiązać bezpieczne połączenie między telefonem (np. iPhone) a laptopem.</p>
    </li>
    <li><strong>Skanowanie kodu QR</strong>
        <p>Interfejs logowania generuje kod QR, który użytkownik skanuje aparatem telefonu. Laptop wysyła następnie kryptograficzne wyzwanie do telefonu, prosząc o podpisanie żądania za pomocą przechowywanego Passkey. Telefon komunikuje się z laptopem w sposób bezpieczny, wykorzystując Bluetooth lub inne protokoły łączności bliskiego zasięgu (np. NFC).</p>
    </li>
    <li><strong>Potwierdzenie tożsamości</strong>
        <p>Po otrzymaniu wyzwania telefon prosi użytkownika o uwierzytelnienie biometryczne (np. Face ID lub Touch ID). Dzięki temu weryfikuje, czy osoba próbująca się zalogować jest uprawnionym użytkownikiem.</p>
    </li>
    <li><strong>Bezpieczne uwierzytelnienie</strong>
        <p>Laptop sprawdza odpowiedź telefonu, weryfikując podpis kryptograficzny względem klucza publicznego zarejestrowanego w usłudze. Jeśli weryfikacja przebiegnie pomyślnie, użytkownik zostaje zalogowany bez konieczności wprowadzania hasła.</p>
    </li>
</ol>
						</div>
				</div>
				<div class="elementor-element elementor-element-5edfe44 elementor-widget elementor-widget-heading" data-id="5edfe44" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Krok po kroku: Konfiguracja Passkey za pomocą smartfona</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-b53966d elementor-widget elementor-widget-text-editor" data-id="b53966d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zanim przejdziemy do niestandardowego procesu uwierzytelniania, należy upewnić się, że w danym realmie jest włączona wymagana akcja <strong>WebAuthn Register Passwordless</strong> (Authentication → zakładka <strong>Required Actions</strong>).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6d213d0 elementor-widget elementor-widget-image" data-id="6d213d0" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img fetchpriority="high" decoding="async" width="773" height="180" src="https://inero-software.com/wp-content/uploads/2025/03/12025-03-11.png" class="attachment-large size-large wp-image-7536" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/12025-03-11.png 773w, https://inero-software.com/wp-content/uploads/2025/03/12025-03-11-300x70.png 300w, https://inero-software.com/wp-content/uploads/2025/03/12025-03-11-768x179.png 768w" sizes="(max-width: 773px) 100vw, 773px" data-attachment-id="7536" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/12025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/12025-03-11.png" data-orig-size="773,180" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="12025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/12025-03-11-300x70.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/12025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-271f72a elementor-widget elementor-widget-text-editor" data-id="271f72a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Dzięki temu możemy na przykład wymusić konfigurację Passkey przez użytkowników po ich następnym pomyślnym logowaniu. Należy jednak pamiętać, że jest to tylko jedna z wielu metod konfigurowania uwierzytelniania wieloskładnikowego.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-456b3a4 elementor-widget elementor-widget-image" data-id="456b3a4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="616" height="227" src="https://inero-software.com/wp-content/uploads/2025/03/22025-03-11.png" class="attachment-large size-large wp-image-7537" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/22025-03-11.png 616w, https://inero-software.com/wp-content/uploads/2025/03/22025-03-11-300x111.png 300w" sizes="(max-width: 616px) 100vw, 616px" data-attachment-id="7537" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/22025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/22025-03-11.png" data-orig-size="616,227" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="22025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/22025-03-11-300x111.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/22025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-a3f5cac elementor-widget elementor-widget-text-editor" data-id="a3f5cac" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Gdy potwierdzimy, że ta opcja jest aktywna, możemy przejść do konfiguracji procesu uwierzytelniania.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0950898 elementor-widget elementor-widget-image" data-id="0950898" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="770" height="452" src="https://inero-software.com/wp-content/uploads/2025/03/32025-03-11.png" class="attachment-large size-large wp-image-7538" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/32025-03-11.png 770w, https://inero-software.com/wp-content/uploads/2025/03/32025-03-11-300x176.png 300w, https://inero-software.com/wp-content/uploads/2025/03/32025-03-11-768x451.png 768w, https://inero-software.com/wp-content/uploads/2025/03/32025-03-11-511x300.png 511w, https://inero-software.com/wp-content/uploads/2025/03/32025-03-11-512x300.png 512w" sizes="(max-width: 770px) 100vw, 770px" data-attachment-id="7538" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/32025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/32025-03-11.png" data-orig-size="770,452" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="32025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/32025-03-11-300x176.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/32025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-87518d4 elementor-widget elementor-widget-text-editor" data-id="87518d4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ten niestandardowy proces uwierzytelniania w Keycloak został zaprojektowany tak, aby pokazać, jak użytkownicy mogą wybierać między uwierzytelnianiem opartym na haśle a uwierzytelnianiem za pomocą Passkey (WebAuthn) podczas logowania. Oto jak to działa:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d372519 elementor-widget elementor-widget-text-editor" data-id="d372519" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li>Użytkownicy muszą podać swoją nazwę użytkownika, aby kontynuować proces uwierzytelniania.</li><li>Ten krok wymusza uwierzytelnienie, jednak użytkownicy mogą wybrać między logowaniem opartym na haśle a logowaniem za pomocą Passkey.</li><li>Jeśli użytkownik wybierze uwierzytelnianie hasłem, wprowadza swoje dane logowania.</li><li>Jeśli preferuje logowanie bezhasłowe przy użyciu Passkey, może uwierzytelnić się tą metodą zamiast hasła.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-5a1acc1 elementor-widget elementor-widget-image" data-id="5a1acc1" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="643" height="279" src="https://inero-software.com/wp-content/uploads/2025/03/42025-03-11.png" class="attachment-large size-large wp-image-7539" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/42025-03-11.png 643w, https://inero-software.com/wp-content/uploads/2025/03/42025-03-11-300x130.png 300w" sizes="(max-width: 643px) 100vw, 643px" data-attachment-id="7539" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/42025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/42025-03-11.png" data-orig-size="643,279" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="42025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/42025-03-11-300x130.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/42025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-d065fdf elementor-widget elementor-widget-text-editor" data-id="d065fdf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Na tym etapie użytkownicy mogą wprowadzić swoją nazwę użytkownika lub adres e-mail, aby kontynuować proces uwierzytelniania. Jest to krok wymagany, który zapewnia, że system identyfikuje użytkownika przed udostępnieniem opcji uwierzytelniania.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4b5d087 elementor-widget elementor-widget-image" data-id="4b5d087" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="644" height="292" src="https://inero-software.com/wp-content/uploads/2025/03/52025-03-11.png" class="attachment-large size-large wp-image-7540" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/52025-03-11.png 644w, https://inero-software.com/wp-content/uploads/2025/03/52025-03-11-300x136.png 300w" sizes="(max-width: 644px) 100vw, 644px" data-attachment-id="7540" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/52025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/52025-03-11.png" data-orig-size="644,292" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="52025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/52025-03-11-300x136.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/52025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-a1bfcfe elementor-widget elementor-widget-text-editor" data-id="a1bfcfe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Na tym etapie możliwe jest jedynie uwierzytelnianie za pomocą hasła, ponieważ Passkey (WebAuthn) nie został jeszcze skonfigurowany. Po jego ustawieniu użytkownicy będą mieli możliwość wyboru między uwierzytelnianiem opartym na haśle a logowaniem bezhasłowym.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c2348be elementor-widget elementor-widget-image" data-id="c2348be" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="655" height="236" src="https://inero-software.com/wp-content/uploads/2025/03/62025-03-11.png" class="attachment-large size-large wp-image-7541" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/62025-03-11.png 655w, https://inero-software.com/wp-content/uploads/2025/03/62025-03-11-300x108.png 300w" sizes="(max-width: 655px) 100vw, 655px" data-attachment-id="7541" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/62025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/62025-03-11.png" data-orig-size="655,236" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="62025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/62025-03-11-300x108.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/62025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-4a740ef elementor-widget elementor-widget-text-editor" data-id="4a740ef" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zamiast rejestrowania kodu PIN urządzenia, jak wspomniano wcześniej, w tym przykładzie użyjemy uwierzytelniania za pomocą telefonu, konkretnie iPhone&#8217;a.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8e0e308 elementor-widget elementor-widget-image" data-id="8e0e308" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="558" height="686" src="https://inero-software.com/wp-content/uploads/2025/03/72025-03-11.png" class="attachment-large size-large wp-image-7542" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/72025-03-11.png 558w, https://inero-software.com/wp-content/uploads/2025/03/72025-03-11-244x300.png 244w" sizes="(max-width: 558px) 100vw, 558px" data-attachment-id="7542" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/72025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/72025-03-11.png" data-orig-size="558,686" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="72025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/72025-03-11-244x300.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/72025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-512ac1c elementor-widget elementor-widget-image" data-id="512ac1c" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="554" height="704" src="https://inero-software.com/wp-content/uploads/2025/03/82025-03-11.png" class="attachment-large size-large wp-image-7543" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/82025-03-11.png 554w, https://inero-software.com/wp-content/uploads/2025/03/82025-03-11-236x300.png 236w" sizes="(max-width: 554px) 100vw, 554px" data-attachment-id="7543" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/82025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/82025-03-11.png" data-orig-size="554,704" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="82025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/82025-03-11-236x300.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/82025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-579c8d6 elementor-widget elementor-widget-text-editor" data-id="579c8d6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Teraz powinien pojawić się kod QR, umożliwiający rejestrację Passkey na naszym koncie. Zeskanujmy go za pomocą aparatu w telefonie i zweryfikujmy operację, na przykład przy użyciu Face ID.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e3e3a98 elementor-widget elementor-widget-image" data-id="e3e3a98" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="547" height="241" src="https://inero-software.com/wp-content/uploads/2025/03/92025-03-11.png" class="attachment-large size-large wp-image-7544" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/92025-03-11.png 547w, https://inero-software.com/wp-content/uploads/2025/03/92025-03-11-300x132.png 300w" sizes="(max-width: 547px) 100vw, 547px" data-attachment-id="7544" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/92025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/92025-03-11.png" data-orig-size="547,241" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="92025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/92025-03-11-300x132.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/92025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-48105ee elementor-widget elementor-widget-text-editor" data-id="48105ee" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Teraz nasz Passkey powinien być widoczny w sekcji <strong>Credentials</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1d1bbc7 elementor-widget elementor-widget-image" data-id="1d1bbc7" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="776" height="486" src="https://inero-software.com/wp-content/uploads/2025/03/102025-03-11.png" class="attachment-large size-large wp-image-7545" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/102025-03-11.png 776w, https://inero-software.com/wp-content/uploads/2025/03/102025-03-11-300x188.png 300w, https://inero-software.com/wp-content/uploads/2025/03/102025-03-11-768x481.png 768w, https://inero-software.com/wp-content/uploads/2025/03/102025-03-11-479x300.png 479w" sizes="(max-width: 776px) 100vw, 776px" data-attachment-id="7545" data-permalink="https://inero-software.com/setting-up-passwordless-login-with-passkey-on-a-mobile-device/102025-03-11/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/102025-03-11.png" data-orig-size="776,486" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="102025-03-11" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/102025-03-11-300x188.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/102025-03-11.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-7b13102 elementor-widget elementor-widget-text-editor" data-id="7b13102" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Podczas następnego logowania powinna pojawić się opcja wyboru między uwierzytelnianiem za pomocą hasła a uwierzytelnianiem za pomocą Passkey.</p><p> </p><p>To rozwiązanie zwiększa wygodę użytkowników, umożliwiając im wybór preferowanej metody uwierzytelniania. Passkeys zapewniają bezpieczniejsze i odporne na phishing logowanie, podczas gdy hasła pozostają dostępne dla tych, którzy preferują tradycyjne metody. Dzięki tej elastyczności można zagwarantować zarówno bezpieczeństwo, jak i łatwy dostęp, dostosowany do różnych preferencji użytkowników.</p><p> </p><p>Warto pamiętać, że tradycyjne hasła stanowią słabe ogniwo w bezpieczeństwie cyfrowym i często są narażone na ataki związane z ich ponownym użyciem, phishingiem lub wyciekami danych. Passkeys oferują nowoczesną metodę uwierzytelniania bez hasła, zwiększającą zarówno bezpieczeństwo, jak i wygodę użytkowania dzięki wykorzystaniu kryptograficznych par kluczy zarządzanych przez platformowe mechanizmy uwierzytelniania. Zapewniają odporność na phishing, płynny dostęp na różnych urządzeniach oraz zgodność ze standardami uwierzytelniania wieloskładnikowego (MFA).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4a97718 elementor-cta--skin-cover elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="4a97718" data-element_type="widget" data-widget_type="call-to-action.default">
				<div class="elementor-widget-container">
					<a class="elementor-cta" href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/">
					<div class="elementor-cta__bg-wrapper">
				<div class="elementor-cta__bg elementor-bg" style="background-image: url(https://inero-software.com/wp-content/uploads/2025/01/cta-wm-1-1030x579.png);" role="img" aria-label="cta wm (1)"></div>
				<div class="elementor-cta__bg-overlay"></div>
			</div>
							<div class="elementor-cta__content">
				
									<h2 class="elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Najlepsze praktyki w Keycloak					</h2>
				
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
					<span class="elementor-cta__button elementor-button elementor-size-">
						Przeczytaj 					</span>
					</div>
							</div>
						</a>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/konfiguracja-logowania-bezhaslowego-za-pomoca-passkey-na-urzadzeniu-mobilnym/">Konfiguracja logowania bezhasłowego za pomocą Passkey na urządzeniu mobilnym</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7555</post-id>	</item>
		<item>
		<title>Zaufane urządzenia w Keycloak</title>
		<link>https://inero-software.com/pl/zaufane-urzadzenia-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Thu, 06 Mar 2025 09:50:09 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[2FA]]></category>
		<category><![CDATA[atrybuty Keycloak]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[funkcje Keycloak]]></category>
		<category><![CDATA[hasło]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[logowanie]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[zaufane urządzenia]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7466</guid>

					<description><![CDATA[<p> Jednym z rozwiązań pozwalających na elastyczne zarządzanie poziomem zabezpieczeń jest mechanizm zaufanych urządzeń, który pozwala użytkownikowi na ograniczenie liczby wymaganych kroków logowania dla znanych i bezpiecznych urządzeń. </p>
<p>Artykuł <a href="https://inero-software.com/pl/zaufane-urzadzenia-w-keycloak/">Zaufane urządzenia w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="7466" class="elementor elementor-7466" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-61f5765 e-flex e-con-boxed e-con e-parent" data-id="61f5765" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-bd55449 elementor-widget elementor-widget-html" data-id="bd55449" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-a676703 elementor-widget elementor-widget-text-editor" data-id="a676703" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4><span class="TextRun SCXW97920126 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW97920126 BCX0">Uwierzytelnianie użytkowników w systemach IT wiąże się z koniecznością znalezienia kompromisu między wygodą a bezpieczeństwem. Z jednej strony użytkownicy oczekują jak najmniejszej liczby kroków przy logowaniu, z drugiej strony konieczne jest zabezpieczenie dostępu do systemu przed nieautoryzowanym użyciem. Jednym z rozwiązań pozwalających na elastyczne zarządzanie poziomem zabezpieczeń jest mechanizm zaufanych urządzeń</span><span class="NormalTextRun SCXW97920126 BCX0">, </span><span class="NormalTextRun SCXW97920126 BCX0">który umożliwia użytkownikowi ograniczenie liczby wymaganych kroków logowania dla znanych i bezpiecznych urządzeń.</span></span><span class="EOP SCXW97920126 BCX0" data-ccp-props="{}"> </span></h4>						</div>
				</div>
				<div class="elementor-element elementor-element-56ff357 elementor-widget elementor-widget-text-editor" data-id="56ff357" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW192030144 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW192030144 BCX0">Im bardziej zacieśniamy politykę bezpieczeństwa, tym większa uciążliwość dla użytkownika</span></span><span class="TextRun SCXW192030144 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW192030144 BCX0">.</span></span><span class="TextRun SCXW192030144 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW192030144 BCX0">– to odwieczny dylemat administratorów systemów. Długie i skomplikowane hasła, częsta ich zmiana, czy dodatkowe składniki uwierzytelniania zwiększają ochronę, ale jednocześnie prowadzą do tego, że użytkownicy szukają sposobów na obejście procedur – zapisują hasła </span><span class="NormalTextRun SCXW192030144 BCX0">w notatniku</span><span class="NormalTextRun SCXW192030144 BCX0"> lub w przeglądarkach.</span></span><span class="EOP SCXW192030144 BCX0" data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-2bce090 elementor-widget elementor-widget-heading" data-id="2bce090" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zaufane urządzenia – jak to działa? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-50fe905 elementor-widget elementor-widget-text-editor" data-id="50fe905" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span data-contrast="auto">Domyślnie Keycloak nie rozpoznaje i nie zapamiętuje urządzeń, dlatego każda sesja traktowana jest niezależnie. Dzięki rozszerzeniom można jednak dodać obsługę zaufanych urządzeń, co pozwala użytkownikowi pominąć część kroków przy kolejnym logowaniu.</span><span data-ccp-props="{}"> </span></p><p><span data-ccp-props="{}"> </span></p><p><span data-contrast="auto">CTO Inero Software, </span><b><span data-contrast="auto">Waldemar Korłub</span></b><span data-contrast="auto">, podkreśla:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-696e202 elementor-blockquote--skin-border elementor-blockquote--button-color-official elementor-widget elementor-widget-blockquote" data-id="696e202" data-element_type="widget" data-widget_type="blockquote.default">
				<div class="elementor-widget-container">
					<blockquote class="elementor-blockquote">
			<p class="elementor-blockquote__content">
				„Stąd właśnie koncepcja zaufanych urządzeń – za pierwszym razem musimy przejść przez wszystkie kroki, ale potem aplikacja może na przykład zrezygnować z pytania o kod logowania dwuskładnikowego.” 			</p>
					</blockquote>
				</div>
				</div>
				<div class="elementor-element elementor-element-f14d2c6 elementor-widget elementor-widget-text-editor" data-id="f14d2c6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW63218033 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW63218033 BCX0">Po oznaczeniu urządzenia jako &#8222;zaufane&#8221; system może przechowywać jego status przez określony czas, co pozwala na uproszczone logowanie. Użytkownik może nadal być okresowo proszony o ponowne uwierzytelnienie w celu zapewnienia bezpieczeństwa.</span></span><span class="EOP SCXW63218033 BCX0" data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-b8b437d elementor-widget elementor-widget-heading" data-id="b8b437d" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Czy zapamiętywanie urządzeń jest bezpieczne? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-785c726 elementor-widget elementor-widget-text-editor" data-id="785c726" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW118681719 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW118681719 BCX0">Choć mechanizm zaufanych urządzeń poprawia komfort użytkowania, wprowadza także dodatkowe ryzyko. Największym zagrożeniem jest kradzież lub utrata urządzenia, któremu wcześniej nadano status zaufanego.</span></span><span class="EOP SCXW118681719 BCX0" data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-a64bc8c elementor-widget elementor-widget-text-editor" data-id="a64bc8c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW14584255 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW14584255 BCX0">Jak zauważa Waldemar Korłub: </span></span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-d11c9c8 elementor-blockquote--skin-border elementor-blockquote--button-color-official elementor-widget elementor-widget-blockquote" data-id="d11c9c8" data-element_type="widget" data-widget_type="blockquote.default">
				<div class="elementor-widget-container">
					<blockquote class="elementor-blockquote">
			<p class="elementor-blockquote__content">
				„Jeśli system nie wymaga dodatkowego składnika uwierzytelniania, atakujący może uzyskać dostęp do wszystkich zapisanych aplikacji. Dlatego kluczowe jest, aby użytkownik miał możliwość zarządzania zaufanymi urządzeniami – najlepiej z poziomu panelu, gdzie w każdej chwili można je usunąć.” 			</p>
					</blockquote>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-1059003 e-flex e-con-boxed e-con e-parent" data-id="1059003" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-aa6f62d elementor-widget elementor-widget-text-editor" data-id="aa6f62d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW238539112 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW238539112 BCX0">Wprowadzenie panelu zarządzania urządzeniami oraz opcji cofnięcia statusu zaufanego urządzenia w sytuacji jego utraty to niezbędne elementy zapewniające bezpieczeństwo.</span></span><span class="EOP SCXW238539112 BCX0" data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-0483644 elementor-widget elementor-widget-heading" data-id="0483644" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak administratorzy mogą kontrolować dostęp w Keycloak? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-84cbf21 elementor-widget elementor-widget-text-editor" data-id="84cbf21" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span data-contrast="auto">Administratorzy mogą ograniczać mechanizm zapamiętywania urządzeń, np. do określonych sieci lub firmowych urządzeń.</span><span data-ccp-props="{}">&nbsp;</span></p>
<p><span data-contrast="auto">Waldemar Korłub wyjaśnia: </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-4323398 elementor-blockquote--skin-border elementor-blockquote--button-color-official elementor-widget elementor-widget-blockquote" data-id="4323398" data-element_type="widget" data-widget_type="blockquote.default">
				<div class="elementor-widget-container">
					<blockquote class="elementor-blockquote">
			<p class="elementor-blockquote__content">
				„Możemy ten mechanizm ograniczyć na przykład do komputerów, które są w sieci lokalnej – jeśli użytkownicy korzystają z firmowego VPN-a, możemy rozpoznać sprzęt firmowy i tam udostępnić opcję zaufanych urządzeń.” 			</p>
					</blockquote>
				</div>
				</div>
				<div class="elementor-element elementor-element-4265831 elementor-widget elementor-widget-text-editor" data-id="4265831" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW134264168 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW134264168 BCX0">Dzięki takim rozwiązaniom można uniknąć sytuacji, w której użytkownicy nadają status zaufanego prywatnym urządzeniom, nad którymi organizacja nie ma kontroli.</span></span><span class="EOP SCXW134264168 BCX0" data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-32fce0a elementor-widget elementor-widget-heading" data-id="32fce0a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zaufane urządzenia w Keycloak – kluczowe wnioski </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d135dd4 elementor-widget elementor-widget-text-editor" data-id="d135dd4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:717,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Zaufane urządzenia pomagają w uproszczeniu logowania, ale wymagają odpowiednich zabezpieczeń</span><span data-ccp-props="{}"> </span></li></ul></li></ul><p><span data-contrast="auto">Mechanizm zaufanych urządzeń w Keycloak pozwala użytkownikom na pominięcie niektórych kroków uwierzytelniania, takich jak podawanie kodu 2FA. Jest to wygodne rozwiązanie, które usprawnia codzienną pracę, ale jednocześnie wymaga wdrożenia odpowiednich mechanizmów ochrony. Należy określić czas ważności zaufanego urządzenia, a także monitorować zmiany w sposobie logowania, aby nie dopuścić do nadużyć.</span><span data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-e312c00 elementor-widget elementor-widget-text-editor" data-id="e312c00" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:717,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Administratorzy mogą kontrolować politykę dostępu do zaufanych urządzeń</span><span data-ccp-props="{}"> </span></li></ul></li></ul><p><span data-contrast="auto">Nie każde urządzenie powinno być oznaczane jako zaufane, dlatego administratorzy mogą ograniczyć tę funkcję do firmowych komputerów lub wymagać połączenia z siecią VPN. W ten sposób można zapobiec sytuacji, w której użytkownik nadaje status zaufanego urządzenia prywatnemu komputerowi, nad którym organizacja nie ma kontroli.</span><span data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-715f0c8 elementor-widget elementor-widget-text-editor" data-id="715f0c8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li><span data-contrast="auto">Panel zarządzania urządzeniami zwiększa bezpieczeństwo</span><span data-ccp-props="{}"> </span></li></ul></li></ul><p><span data-contrast="auto">Aby zapewnić użytkownikom większą kontrolę nad ich sesjami, warto wdrożyć panel pozwalający na przegląd i usuwanie zaufanych urządzeń. Dzięki temu w przypadku utraty sprzętu lub podejrzenia nieautoryzowanego logowania użytkownik może szybko cofnąć nadane uprawnienia.</span><span data-ccp-props="{}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-1e4653d elementor-widget elementor-widget-text-editor" data-id="1e4653d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:717,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Możliwość usunięcia urządzenia chroni przed przejęciem konta</span><span data-ccp-props="{}"> </span></li></ul></li></ul><p><span data-contrast="auto">Jeśli urządzenie zostanie skradzione lub zgubione, a system nie wymaga dodatkowej autoryzacji, atakujący może uzyskać dostęp do konta użytkownika. Dlatego ważne jest, aby w każdej chwili można było usunąć zaufane urządzenie i wymusić ponowną weryfikację. Takie rozwiązanie pozwala na większą elastyczność, a jednocześnie zmniejsza ryzyko przejęcia konta przez osoby nieuprawnione.</span><span data-ccp-props="{}"> </span></p><p><span data-ccp-props="{&quot;335559685&quot;:0}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-74208e6 elementor-widget elementor-widget-heading" data-id="74208e6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Kiedy warto wykorzystać funkcje zaufane urządzenia w Keycloak? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-c9a0c94 elementor-widget elementor-widget-text-editor" data-id="c9a0c94" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW150832403 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW150832403 BCX0">Funkcja zaufanych urządzeń w Keycloak pozwala na zwiększenie wygody logowania, przy jednoczesnym utrzymaniu wysokiego poziomu bezpieczeństwa. To zastosowanie sprawdza się szczególnie w środowiskach korporacyjnych oraz modelach BYOD (Bring Your Own Device), gdzie użytkownicy regularnie korzystają z tych samych urządzeń. Oznaczenie urządzenia jako zaufanego pozwala zmniejszyć liczbę żądań drugiego czynnika uwierzytelniania (2FA), wydłużyć sesję oraz dynamicznie dostosować politykę bezpieczeństwa, np. wymagając ponownej autoryzacji przy podejrzanych logowaniach. Dzięki temu można ograniczyć ryzyko przejęcia konta przez atakujących, nawet jeśli uzyskają hasło i kod 2FA, ponieważ logowanie z nowego urządzenia może wymagać dodatkowej weryfikacji. Implementacja mechanizmu zaufanych urządzeń w Keycloak pomaga w równoważeniu bezpieczeństwa i wygody użytkowników</span><span class="NormalTextRun SCXW150832403 BCX0">.</span></span><span class="EOP SCXW150832403 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:357,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:259}">&nbsp;</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-eeb8eea elementor-widget elementor-widget-text-editor" data-id="eeb8eea" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span data-contrast="auto">Mechanizm zaufanych urządzeń w Keycloak to sposób na poprawę wygody logowania bez nadmiernego obniżenia poziomu cyberbezpieczeństwa. Odpowiednie wdrożenie polityki zapamiętywania urządzeń w Keycloak pozwala na zrównoważenie ochrony systemu i wygody użytkowników. Administratorzy powinni jednak zapewnić mechanizmy zarządzania listą zaufanych urządzeń oraz wymuszać okresowe potwierdzanie ich statusu, aby uniknąć potencjalnych zagrożeń</span><span data-ccp-props="{}"> </span></p><p><span data-ccp-props="{}"> </span></p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-9973b2a e-flex e-con-boxed e-con e-parent" data-id="9973b2a" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-58da433 elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="58da433" data-element_type="widget" data-widget_type="call-to-action.default">
				<div class="elementor-widget-container">
					<a class="elementor-cta" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3e3C_1YeBkt1uCr_qfOnG_N298UgLFwORcSTXigrPfOk0ls3ok-Uw_dSeGCoLdtYsN13GMm-n-">
					<div class="elementor-cta__bg-wrapper">
				<div class="elementor-cta__bg elementor-bg" style="background-image: url(https://inero-software.com/wp-content/uploads/2025/02/cta-2702-1030x579.png);" role="img" aria-label="cta 2702"></div>
				<div class="elementor-cta__bg-overlay"></div>
			</div>
							<div class="elementor-cta__content">
				
									<h2 class="elementor-cta__title elementor-cta__content-item elementor-content-item">
						Pomożemy Ci we wdrożeniu Keycloak					</h2>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item">
						Chcesz wdrożyć Keycloak lub dodać nowe funkcjonalności? Umów spotkanie, by poznać możliwości. 					</div>
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item ">
					<span class="elementor-cta__button elementor-button elementor-size-">
						Umów spotkanie 					</span>
					</div>
							</div>
						</a>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/zaufane-urzadzenia-w-keycloak/">Zaufane urządzenia w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7466</post-id>	</item>
		<item>
		<title>Wdrażanie uwierzytelniania wieloskładnikowego za pomocą wiadomości e-mail w Keycloak</title>
		<link>https://inero-software.com/pl/wdrazanie-uwierzytelniania-wieloskladnikowego-za-pomoca-e-maila-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Thu, 13 Feb 2025 11:26:40 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[uwierzytelnianie email]]></category>
		<category><![CDATA[uwierzytelnianie wieloskładnikowe]]></category>
		<category><![CDATA[zarządzanie dostępem i tożsamością]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7058</guid>

					<description><![CDATA[<p>W tym artykule przyjrzymy się niestandardowej implementacji MFA, która wysyła jednorazowy kod uwierzytelniający na adres e-mail użytkownika.</p>
<p>Artykuł <a href="https://inero-software.com/pl/wdrazanie-uwierzytelniania-wieloskladnikowego-za-pomoca-e-maila-w-keycloak/">Wdrażanie uwierzytelniania wieloskładnikowego za pomocą wiadomości e-mail w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="7058" class="elementor elementor-7058" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-091b893 e-flex e-con-boxed e-con e-parent" data-id="091b893" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-628ea76 e-con-full e-flex e-con e-child" data-id="628ea76" data-element_type="container">
				</div>
		<div class="elementor-element elementor-element-9ca8a9e e-con-full e-flex e-con e-child" data-id="9ca8a9e" data-element_type="container">
				<div class="elementor-element elementor-element-edd1fd0 elementor-widget elementor-widget-html" data-id="edd1fd0" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-3e56066 elementor-widget elementor-widget-text-editor" data-id="3e56066" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h5>Keycloak natywnie obsługuje wiele bezpiecznych metod logowania i zawiera wbudowane mechanizmy jednorazowych haseł (OTP), takie jak uwierzytelnianie za pomocą aplikacji mobilnych, np. Google Authenticator lub naszego rozwiązania <a href="https://inero-software.com/introducing-authm8-a-free-cross-platform-2fa-solution-tailored-to-your-brand-for-secure-authentication/">AuthM8</a>. Jednak jeśli chcemy korzystać z innych zaawansowanych metod uwierzytelniania i na przykład wysyłać kody OTP przez e-mail, to – podobnie jak w przypadku uwierzytelniania wieloskładnikowego za pomocą SMS (<a href="https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/">więcej szczegółów TUTAJ)</a> – musimy samodzielnie zaimplementować tę funkcjonalność. W tym artykule przyjrzymy się niestandardowej implementacji MFA, która wysyła jednorazowy kod uwierzytelniający na adres e-mail użytkownika.</h5>						</div>
				</div>
				<div class="elementor-element elementor-element-0994f82 elementor-widget elementor-widget-heading" data-id="0994f82" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak działa uwierzytelnianie wieloskładnikowe oparte na e-mailu?</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-8e8909e elementor-widget elementor-widget-text-editor" data-id="8e8909e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Proces uwierzytelniania składa się z dwóch głównych etapów:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8435873 elementor-widget elementor-widget-text-editor" data-id="8435873" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li><strong>Generowanie i wysyłanie kodu MFA</strong></li></ul></li></ul><p>Jeśli użytkownik ma już aktywny plik cookie potwierdzający wcześniejszą weryfikację MFA, powinien zostać natychmiast uwierzytelniony. W przeciwnym razie Keycloak tworzy nowe poświadczenie dla użytkownika i generuje jednorazowy kod na podstawie konfigurowalnych parametrów, takich jak długość lub czas ważności. Kod jest przechowywany w poświadczeniach użytkownika, a następnie wysyłany e-mailem za pośrednictwem dostawcy poczty e-mail.</p><p> </p><ul><li style="list-style-type: none;"><ul><li><strong>Weryfikacja wprowadzonego kodu</strong></li></ul></li></ul><p>Gdy użytkownik wprowadzi kod, Keycloak pobiera zapisane poświadczenie i porównuje wprowadzoną wartość. Jeśli kod jest poprawny i nadal ważny (nie wygasł), uwierzytelnienie kończy się sukcesem, a plik cookie zostaje zapisany w celu zapamiętania weryfikacji. Jeśli kod jest niepoprawny, użytkownik zostaje poproszony o ponowne jego wprowadzenie. Jeśli kod wygasł, wyświetlany jest komunikat o błędzie i proces musi zostać rozpoczęty od nowa.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d65460b elementor-widget elementor-widget-image" data-id="d65460b" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="1030" height="579" src="https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-1030x579.png" class="attachment-large size-large wp-image-7044" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-300x169.png 300w, https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-768x432.png 768w, https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-533x300.png 533w, https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART.png 1920w" sizes="(max-width: 1030px) 100vw, 1030px" data-attachment-id="7044" data-permalink="https://inero-software.com/behind-the-scenes-2-implementing-email-based-mfa-in-keycloak/email-based-two-factor-authentication-flowchart/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART.png" data-orig-size="1920,1080" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="EMAIL-BASED TWO-FACTOR AUTHENTICATION FLOWCHART" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/EMAIL-BASED-TWO-FACTOR-AUTHENTICATION-FLOWCHART-1030x579.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-5925a75 elementor-widget elementor-widget-heading" data-id="5925a75" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Plusy i minusy</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-3c6c4e2 elementor-widget elementor-widget-text-editor" data-id="3c6c4e2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Uwierzytelnianie wieloskładnikowe (MFA) oparte na e-mailu zapewnia dodatkowe zabezpieczenie w przypadku naruszenia podstawowego czynnika, takiego jak hasło. Jest to szczególnie przydatne w sytuacjach, gdy hasła zostają złamane metodą brute-force lub są łatwe do odgadnięcia, na przykład w przypadku popularnych kombinacji, takich jak „123456”. Podobnie, to rozwiązanie chroni przed atakami typu credential stuffing, w których cyberprzestępcy wykorzystują wyciekłe hasła z innych naruszeń do prób logowania na konta.</p>
<p><br></p>
<p></p>
<p><strong>Dodatkowe korzyści z używania za pomocą e-maila jako metody MFA:</strong></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>Brak konieczności podawania dodatkowych wrażliwych informacji</strong>, takich jak numer telefonu, co zmniejsza obawy o prywatność.</li>
<li><strong>Brak potrzeby instalowania osobnej aplikacji ani przechodzenia przez skomplikowaną konfigurację</strong>, co upraszcza cały proces.</li>
<li><strong>Użytkownicy są przyzwyczajeni do podawania adresu e-mail w różnych celach</strong>, takich jak otrzymywanie ważnych powiadomień o koncie czy resetowanie haseł. Ta znajomość sprawia, że metoda ta jest łatwiejsza do zaakceptowania.</li>
</ul>
</li>
</ul>
<p><strong><br></strong></p><p><strong>Ograniczenia MFA opartego na e-mailu:</strong></p>
<p>E-mail jako kanał dostarczania kodów ma również pewne wady. Jeśli atakujący przejmie dostęp do skrzynki e-mail (np. uzyska dane logowania lub wykorzysta aktywną sesję), może potencjalnie zresetować hasła do innych kont. W przypadku użytkowników znajdujących się w szczególnie narażonych sytuacjach, np. korzystających ze współdzielonych urządzeń, MFA oparte na e-mailu może nie zapewnić pełnej ochrony.</p>
<p>Jak w przypadku każdej metody zabezpieczeń, kluczowe jest rozważenie korzyści w stosunku do potencjalnych ryzyk i uzupełnienie MFA opartego na e-mailu innymi środkami bezpieczeństwa, takimi jak silna polityka haseł i bezpieczne praktyki korzystania z poczty e-mail.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4fd89fe elementor-widget elementor-widget-heading" data-id="4fd89fe" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Wdrożenie MFA opartego na e-mailu</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-cfc16d2 elementor-widget elementor-widget-image" data-id="cfc16d2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="755" height="508" src="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335.png" class="attachment-large size-large wp-image-7045" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335.png 755w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335-300x202.png 300w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335-446x300.png 446w" sizes="(max-width: 755px) 100vw, 755px" data-attachment-id="7045" data-permalink="https://inero-software.com/behind-the-scenes-2-implementing-email-based-mfa-in-keycloak/zrzut-ekranu-2025-02-13-102335/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335.png" data-orig-size="755,508" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Zrzut ekranu 2025-02-13 102335" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335-300x202.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102335.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-295f2c1 elementor-widget elementor-widget-text-editor" data-id="295f2c1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tym zmodyfikowanym przepływie uwierzytelniania w przeglądarce, integrujemy niestandardowe MFA jako dodatkową metodę uwierzytelniania. Dodane zostały dwa nowe kroki:</p><ul><li style="list-style-type: none;"><ul><li><strong>Konfiguracja MFA opartego na e-mailu</strong> – ten etap zapewnia, że e-mail użytkownika jest skonfigurowany i zweryfikowany przed kontynuacją procesu. Jeśli użytkownik nie posiada niestandardowego poświadczenia MFA (które przechowuje kody OTP jako tajne dane), zostanie ono również ustawione.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-1cb9fd2 elementor-widget elementor-widget-text-editor" data-id="1cb9fd2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">public class MfaEmailSetupAuthenticator implements Authenticator, CredentialValidator&lt;MfaEmailCredentialProvider&gt; {</span><br /><span style="font-weight: 400;">@Override</span><br /><span style="font-weight: 400;">public void authenticate(AuthenticationFlowContext context) {</span><br /><span style="font-weight: 400;">[…]</span><br /><span style="font-weight: 400;">// Require email verification</span><br /><span style="font-weight: 400;">if (!userModel.isEmailVerified()) {</span><br /><span style="font-weight: 400;">userModel.addRequiredAction(UserModel.RequiredAction.VERIFY_EMAIL);</span><br /><span style="font-weight: 400;">}</span><br /><span style="font-weight: 400;">// Add MFA email credential if not present</span><br /><span style="font-weight: 400;">if (!getCredentialProvider(context.getSession()).isConfiguredFor(realmModel, userModel, MfaEmailCredentialModel.TYPE)) {</span><br /><span style="font-weight: 400;">userModel.credentialManager().createStoredCredential(new MfaEmailCredentialModel(new MfaEmailCredentialData()));</span><br /><span style="font-weight: 400;">}</span><br /><span style="font-weight: 400;">[…]</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-6908dab elementor-widget__width-initial elementor-widget elementor-widget-image" data-id="6908dab" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="635" height="398" src="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520.png" class="attachment-large size-large wp-image-7046" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520.png 635w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520-300x188.png 300w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520-479x300.png 479w" sizes="(max-width: 635px) 100vw, 635px" data-attachment-id="7046" data-permalink="https://inero-software.com/behind-the-scenes-2-implementing-email-based-mfa-in-keycloak/zrzut-ekranu-2025-02-13-102520/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520.png" data-orig-size="635,398" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Zrzut ekranu 2025-02-13 102520" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520-300x188.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102520.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-eafd6c8 elementor-widget elementor-widget-text-editor" data-id="eafd6c8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li><strong>Uwierzytelnianie MFA oparte na e-mailu</strong> – to właściwy etap uwierzytelniania, w którym jednorazowy kod jest wysyłany na adres e-mail użytkownika. Jest oznaczony jako <strong>Alternatywny</strong>, co oznacza, że może być używany zamiast innych metod MFA, takich jak OTP z aplikacji mobilnej.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-bdcf27f elementor-widget__width-initial elementor-widget elementor-widget-image" data-id="bdcf27f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="473" height="622" src="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652.png" class="attachment-large size-large wp-image-7047" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652.png 473w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652-228x300.png 228w" sizes="(max-width: 473px) 100vw, 473px" data-attachment-id="7047" data-permalink="https://inero-software.com/behind-the-scenes-2-implementing-email-based-mfa-in-keycloak/zrzut-ekranu-2025-02-13-102652/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652.png" data-orig-size="473,622" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Zrzut ekranu 2025-02-13 102652" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652-228x300.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-102652.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-10b800d elementor-widget elementor-widget-text-editor" data-id="10b800d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li><strong>Max Cookie Age</strong> – to ustawienie określa, jak długo sesja MFA (plik cookie) pozostaje ważna. Jeśli plik cookie jest nadal aktywny, użytkownik nie zostanie ponownie poproszony o uwierzytelnienie MFA.</li><li><strong>Time-to-live</strong> – wskazuje czas życia kodu MFA.</li></ul></li></ul><p> </p><p>Teraz przyjrzyjmy się kodowi.</p><p> </p><p>Poniższa metoda obsługuje sam proces MFA. Jeśli istnieje ważny plik cookie (co oznacza, że użytkownik już ukończył MFA), metoda natychmiast zwraca sukces, kończąc przepływ uwierzytelniania bez konieczności podejmowania dodatkowych działań.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-89fa524 elementor-widget elementor-widget-text-editor" data-id="89fa524" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">@Override</span><br /><span style="font-weight: 400;">public void authenticate(AuthenticationFlowContext context) {</span><br /><span style="font-weight: 400;">if (hasValidCookie(context)) {</span><br /><span style="font-weight: 400;">context.success();</span><br /><span style="font-weight: 400;">return;</span><br /><span style="font-weight: 400;">}</span><br /><span style="font-weight: 400;">[…]</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-55ff859 elementor-widget elementor-widget-text-editor" data-id="55ff859" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Jeśli plik cookie nie istnieje, należy spróbować pobrać istniejące poświadczenie MFA użytkownika z dostawcy poświadczeń. Jeśli użytkownik go nie posiada, tworzona jest nowa instancja przy użyciu <strong>MfaEmailCredentialModel</strong>, który rozszerza wbudowany <strong>CredentialModel</strong>.</p><p><span style="font-weight: 400;"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-0af0624 elementor-widget elementor-widget-text-editor" data-id="0af0624" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">[…]</span><br /><span style="font-weight: 400;">// get existing credential or create a new one</span><br /><span style="font-weight: 400;">CredentialModel credentialModel = getCredentialProvider(session)</span><br /><span style="font-weight: 400;">.getDefaultCredential(session, context.getRealm(), user);</span><br /><span style="font-weight: 400;">if (credentialModel == null) {</span><br /><span style="font-weight: 400;">credentialModel = user.credentialManager().createStoredCredential(new MfaEmailCredentialModel(new MfaEmailCredentialData()));</span><br /><span style="font-weight: 400;">}</span><br /><span style="font-weight: 400;">[…]</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-c7af14a elementor-widget elementor-widget-text-editor" data-id="c7af14a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Następnie metoda <strong>authenticate</strong> odczytuje właściwości konfiguracyjne, takie jak długość kodu i <strong>TTL</strong> (time-to-live). Sam kod może zostać wygenerowany za pomocą odpowiedniej metody narzędziowej i zostanie zapisany jako <strong>secretData</strong> w modelu poświadczeń.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6551375 elementor-widget elementor-widget-text-editor" data-id="6551375" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">// generate and store code</span><br /><span style="font-weight: 400;">int length = Integer.parseInt(configMap.get(CONFIG_CODE_LENGTH));</span><br /><span style="font-weight: 400;">int ttl = Integer.parseInt(configMap.get(CONFIG_CODE_TTL));</span><br /><span style="font-weight: 400;">String code = MfaEmailCodesUtils.generateCode(length);</span><br /><span style="font-weight: 400;">credentialModel.setSecretData(code);</span><br /><span style="font-weight: 400;">user.credentialManager().updateStoredCredential(credentialModel);</span><br /><span style="font-weight: 400;">AuthenticationSessionModel authSession = context.getAuthenticationSession();</span><br /><span style="font-weight: 400;">authSession.setAuthNote("ttl", Long.toString(System.currentTimeMillis() + (ttl * 1000L)));</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-b7f4d62 elementor-widget elementor-widget-text-editor" data-id="b7f4d62" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Na końcu wywoływana jest metoda <strong>sendCode</strong>, która wysyła wygenerowany kod na adres e-mail użytkownika. Jeśli wiadomość e-mail zostanie wysłana pomyślnie, metoda wyświetla formularz, w którym użytkownik może wprowadzić kod MFA.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-dc63501 elementor-widget elementor-widget-text-editor" data-id="dc63501" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">// send email and show input form</span><br /><span style="font-weight: 400;">try {</span><br /><span style="font-weight: 400;">MfaEmailCodesUtils.sendCode(session, user, ttl, code, configMap);</span><br /><span style="font-weight: 400;">context.challenge(context.form().setAttribute("realm", context.getRealm()).createForm(TPL_CODE));</span><br /><span style="font-weight: 400;">} catch (Exception e) {</span><br /><span style="font-weight: 400;">context.failureChallenge(AuthenticationFlowError.INTERNAL_ERROR,</span><br /><span style="font-weight: 400;">context.form().setError("mfaEmailNotSent", e.getMessage())  .createErrorPage(Response.Status.INTERNAL_SERVER_ERROR));</span><br /><span style="font-weight: 400;">}</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-b41ad7b elementor-widget elementor-widget-text-editor" data-id="b41ad7b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Drugą kluczową częścią naszego mechanizmu uwierzytelniania jest metoda <strong>action</strong>, która odpowiada za walidację kodu wprowadzonego przez użytkownika. Jest ona wywoływana w momencie, gdy użytkownik przesyła formularz po otrzymaniu wiadomości e-mail.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9551f9f elementor-widget__width-initial elementor-widget elementor-widget-image" data-id="9551f9f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="663" height="391" src="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114.png" class="attachment-large size-large wp-image-7048" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114.png 663w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114-300x177.png 300w, https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114-509x300.png 509w" sizes="(max-width: 663px) 100vw, 663px" data-attachment-id="7048" data-permalink="https://inero-software.com/behind-the-scenes-2-implementing-email-based-mfa-in-keycloak/zrzut-ekranu-2025-02-13-103114/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114.png" data-orig-size="663,391" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Zrzut ekranu 2025-02-13 103114" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114-300x177.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/Zrzut-ekranu-2025-02-13-103114.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-460cfb7 elementor-widget elementor-widget-text-editor" data-id="460cfb7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Metoda pobiera poświadczenie użytkownika od dostawcy, a następnie kod jest weryfikowany poprzez porównanie go z zapisanym poświadczeniem za pomocą niestandardowej metody <strong>isValid</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ff19a7e elementor-widget elementor-widget-text-editor" data-id="ff19a7e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">[…]</span><br /><span style="font-weight: 400;">final MfaEmailCredentialModel credentialModel = getCredentialProvider(session)</span><br /><span style="font-weight: 400;">        .getDefaultCredential(session, context.getRealm(), user);</span><br /><span style="font-weight: 400;">boolean isValid = getCredentialProvider(session).isValid(context.getRealm(), user,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">new UserCredentialModel(credentialModel.getId(), getCredentialProvider(context.getSession()).getType(), enteredCode));</span><br /><span style="font-weight: 400;">[…]</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-7b502f8 elementor-widget elementor-widget-text-editor" data-id="7b502f8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Jeśli kod jest poprawny, następnym krokiem jest sprawdzenie, czy nie wygasł. Możemy również ustawić plik cookie przechowujący sesję MFA, aby zapobiec ponownemu proszeniu użytkownika o uwierzytelnienie MFA w okresie ważności tego pliku cookie.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-3db7437 elementor-widget elementor-widget-text-editor" data-id="3db7437" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">[…]</span><br /><span style="font-weight: 400;">// valid</span><br /><span style="font-weight: 400;">HttpResponse response = context.getSession().getContext().getHttpResponse();</span><br /><span style="font-weight: 400;">response.setCookieIfAbsent(createCookie(context));</span><br /><span style="font-weight: 400;">context.success();</span><br /><span style="font-weight: 400;">[…]</span></pre><p><span style="font-weight: 400;"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-83cf638 elementor-widget elementor-widget-text-editor" data-id="83cf638" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Oczywiście, w tym artykule nie omówimy całego zagadnienia, pomijając szczegóły implementacyjne, takie jak wysyłanie kodu, jego generowanie, walidacja oraz tworzenie niestandardowego pliku cookie.</p><p> </p><p>Jednak przeanalizowaliśmy kluczowe kroki implementacji uwierzytelniania dwuskładnikowego (2FA) przy użyciu kodów wysyłanych na e-mail. Z jednej strony podejście to oferuje prostą i łatwo dostępną metodę zabezpieczeń. Choć ma pewne wady, zastosowanie go w rozwiązaniach takich jak Keycloak pozwala zminimalizować wiele z tych zagrożeń. Keycloak zapewnia również elastyczność w łączeniu MFA opartego na e-mailu z innymi mechanizmami zabezpieczeń, tworząc bardziej warstwowy i odporny proces uwierzytelniania, który może skutecznie chronić przed rozwijającymi się zagrożeniami cybernetycznymi.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a27180c elementor-cta--skin-cover elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="a27180c" data-element_type="widget" data-widget_type="call-to-action.default">
				<div class="elementor-widget-container">
					<div class="elementor-cta">
					<div class="elementor-cta__bg-wrapper">
				<div class="elementor-cta__bg elementor-bg" style="background-image: url(https://inero-software.com/wp-content/uploads/2024/11/tlo-popup-keycloak-1030x731.png);" role="img" aria-label="tło popup keycloak"></div>
				<div class="elementor-cta__bg-overlay"></div>
			</div>
							<div class="elementor-cta__content">
				
									<h3 class="elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Czy potrzebujesz pomocy w konfiguracji uwierzytelniania wieloskładnikowego?					</h3>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Umów spotkanie, aby dowiedzieć się, jak możemy Ci pomóc.					</div>
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
					<a class="elementor-cta__button elementor-button elementor-size-" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3e3C_1YeBkt1uCr_qfOnG_N298UgLFwORcSTXigrPfOk0ls3ok-Uw_dSeGCoLdtYsN13GMm-n-">
						Umów spotkanie 					</a>
					</div>
							</div>
						</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-6bc7752 e-con-full e-flex e-con e-child" data-id="6bc7752" data-element_type="container">
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-091ddaf e-flex e-con-boxed e-con e-parent" data-id="091ddaf" data-element_type="container">
					<div class="e-con-inner">
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/wdrazanie-uwierzytelniania-wieloskladnikowego-za-pomoca-e-maila-w-keycloak/">Wdrażanie uwierzytelniania wieloskładnikowego za pomocą wiadomości e-mail w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7058</post-id>	</item>
		<item>
		<title>Systemy Security Information and Event Management. Dlaczego warto dodać do nich Keycloak?</title>
		<link>https://inero-software.com/pl/systemy-security-information-and-event-management-dlaczego-warto-dodac-do-nich-keycloak/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Thu, 06 Feb 2025 08:35:21 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[oprogramowanie]]></category>
		<category><![CDATA[SIEM]]></category>
		<category><![CDATA[Systemy Security Information and Event Management]]></category>
		<category><![CDATA[współpraca]]></category>
		<category><![CDATA[zarządzanie dostępem i tożsamością]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=6923</guid>

					<description><![CDATA[<p>Z tego bloga dowiesz się, jak Keycloak może wspierać Twój system SIEM.  </p>
<p>Artykuł <a href="https://inero-software.com/pl/systemy-security-information-and-event-management-dlaczego-warto-dodac-do-nich-keycloak/">Systemy Security Information and Event Management. Dlaczego warto dodać do nich Keycloak?</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="6923" class="elementor elementor-6923" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-3de08d1 e-flex e-con-boxed e-con e-parent" data-id="3de08d1" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-2840281 e-con-full e-flex e-con e-child" data-id="2840281" data-element_type="container">
				</div>
		<div class="elementor-element elementor-element-743954c e-con-full e-flex e-con e-child" data-id="743954c" data-element_type="container">
				<div class="elementor-element elementor-element-123bd75 elementor-widget elementor-widget-html" data-id="123bd75" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-e5f96e1 elementor-widget elementor-widget-text-editor" data-id="e5f96e1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4 data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><b><span data-contrast="auto">Systemy Security Information and Event Management (SIEM) pozwalają na zbieranie i analizowanie informacji na temat aktywności użytkowników, dostępu do systemów i zdarzeń związanych z cyberbezpieczeństwem, aby wykrywać zagrożenia i reagować na incydenty w czasie rzeczywistym. Z kolei informacji o aktywności użytkowników dostarczają systemy typu IAM (Identity and Access Management). Z tego bloga dowiesz się, jak Keycloak może wspierać Twój system SIEM. </span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></h4>						</div>
				</div>
				<div class="elementor-element elementor-element-6d65b13 elementor-widget elementor-widget-text-editor" data-id="6d65b13" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">W raporcie o stanie bezpieczeństwa cyberprzestrzeni RP w 2023 roku przygotowanym przez CSIRT GOV, wskazano, że wśród zagrożeń utrzymujących się w cyberprzestrzeni RP w omawianym roku, które miały szczególny wpływ na ocenę ryzyka, należy wymienić ataki socjotechniczne oraz ataki typu brute-force.  Ataki socjotechniczne polegają na manipulacji użytkownikami w celu uzyskania nieautoryzowanego dostępu do systemów, podczas gdy ataki brute-force opierają się na automatycznym próbowaniu różnych kombinacji haseł w celu złamania zabezpieczeń.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Odpowiednie zarządzanie tożsamościami i monitoring logów to kluczowe elementy ochrony przed takimi atakami. Właśnie dlatego integracja Keycloak z SIEM pozwala organizacjom skuteczniej wykrywać zagrożenia i natychmiast na nie reagować.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-458b119 elementor-widget elementor-widget-heading" data-id="458b119" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Dlaczego warto integrować SIEM z Keycloak? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-df01dde elementor-widget elementor-widget-text-editor" data-id="df01dde" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Każda organizacja korzystająca z systemu SIEM dąży do wykrywania jak największej liczby zagrożeń i możliwie szybkiej reakcji na incydenty. Informacje o tym, kto, skąd i kiedy próbował uzyskać dostęp do systemów, mogą być kluczowe w wykrywaniu ataków oraz nieautoryzowanych prób logowania. Właśnie tutaj Keycloak – popularna platforma IAM typu open source – może znacząco wzbogacić ekosystem SIEM, dostarczając cennych informacji o procesach uwierzytelniania, autoryzacji i zarządzania sesjami.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Keycloak jest rozwijany przez społeczność Red Hat i oferuje kompleksowe rozwiązania do uwierzytelniania i autoryzacji użytkowników w aplikacjach webowych, mobilnych i usługach backendowych. Opisaliśmy go dokładnie tu https://inero-software.com/pl/keycloak/</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-cfe258a elementor-widget elementor-widget-text-editor" data-id="cfe258a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Keycloak może dostarczyć danych o:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><ul><li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Próbach logowania – zarówno udanych, jak i nieudanych, wraz z informacją o źródłowym adresie IP.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><ul><li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">Wymuszeniach resetu hasła i zmianach w polityce dostępów – pozwala to monitorować potencjalne próby przejęcia konta.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><ul><li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Sesjach użytkowników – w tym nietypowych logowaniach z nowych lokalizacji lub urządzeń.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><ul><li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><span data-contrast="auto">Wykrytych zagrożeniach, takich jak podejrzane próby wielokrotnego logowania (np. ataki brute-force, polegające na łamaniu haseł lub kluczy kryptograficznych w celu sprawdzenia wszystkich możliwych kombinacji).</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><p data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Z kolei system SIEM może analizować te dane i korelować je z innymi zdarzeniami, np.:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><ul><li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Próby logowania z nietypowej lokalizacji powiązane z podejrzanym ruchem sieciowym.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><ul><li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">Wielokrotne błędne logowania pochodzące z jednego IP – sygnał ataku brute-force.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul><ul><li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Nagłe zmiany uprawnień użytkownika powiązane z podejrzanym dostępem do systemu.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-4686a0e elementor-widget elementor-widget-text-editor" data-id="4686a0e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW240654469 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW240654469 BCX0">Jako przykład skutecznej integracji możemy wskazać sytuację, w której</span><span class="NormalTextRun SCXW240654469 BCX0"> użytkownik wielokrotnie wprowadza błędne hasło w krótkim czasie, </span><span class="NormalTextRun SpellingErrorV2Themed SCXW240654469 BCX0">Keycloak</span><span class="NormalTextRun SCXW240654469 BCX0"> rejestruje to jako podejrzaną aktywność. SIEM może połączyć te dane z próbami logowania z różnych lokalizacji i podjąć działania, np. tymczasowo blokując konto lub wymuszając dodatkowe uwierzytelnienie.</span></span><span class="EOP SCXW240654469 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-96d9b04 elementor-widget elementor-widget-heading" data-id="96d9b04" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak Keycloak uzupełnia system SIEM? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-3550cbc elementor-widget elementor-widget-text-editor" data-id="3550cbc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW30192237 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SpellingErrorV2Themed SCXW30192237 BCX0">Keycloak</span><span class="NormalTextRun SCXW30192237 BCX0"> i systemy Security Information and Event Management służą różnym celom w zakresie zarządzania tożsamością i bezpieczeństwa IT</span><span class="NormalTextRun SCXW30192237 BCX0">, ale świetnie się uzupełniają. </span></span><span class="EOP SCXW30192237 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-22daa90 elementor-widget elementor-widget-text-editor" data-id="22daa90" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<table style="font-weight: 400;" data-tablestyle="MsoNormalTable" data-tablelook="1184" aria-rowcount="9">
<tbody>
<tr aria-rowindex="1">
<td data-celllook="4369">
<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><b><span data-contrast="auto">Cecha</span></b></p>
</td>
<td data-celllook="4369">
<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><b><span data-contrast="auto">SIEM (Security Information and Event Management)</span></b></p>
</td>
<td data-celllook="4369">
<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><b><span data-contrast="auto">IAM (Identity and Access Management – Keycloak)</span></b></p>
</td>
</tr>
<tr aria-rowindex="2">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Główna funkcja</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Monitorowanie i analiza zdarzeń bezpieczeństwa</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Zarządzanie tożsamością i dostępem użytkowników</span></p>
</td>
</tr>
<tr aria-rowindex="3">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Zakres działania</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Zbieranie logów, analiza incydentów, wykrywanie zagrożeń</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Uwierzytelnianie, autoryzacja, kontrola dostępu</span></p>
</td>
</tr>
<tr aria-rowindex="4">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Rodzaje danych</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Logi systemowe, ruch sieciowy, alerty bezpieczeństwa</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Sesje użytkowników, logi uwierzytelniania, żądania autoryzacji</span></p>
</td>
</tr>
<tr aria-rowindex="5">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Sposób działania</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Agregacja i korelacja zdarzeń z wielu źródeł</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Weryfikacja tożsamości użytkowników i ich uprawnień</span></p>
</td>
</tr>
<tr aria-rowindex="6">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Główne zastosowania</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Wykrywanie anomalii, reagowanie na incydenty, compliance</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Single Sign-On (SSO), federacja tożsamości, MFA</span></p>
</td>
</tr>
<tr aria-rowindex="7">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Przykłady zagrożeń</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Ataki DDoS, malware, eskalacja uprawnień</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Próby ataku brute-force, przejęcie konta, nadużycie uprawnień</span></p>
</td>
</tr>
<tr aria-rowindex="8">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Reakcja na zagrożenia</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Generowanie alertów, automatyczne blokady, raportowanie</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Blokowanie kont, wymuszanie MFA, zarządzanie sesjami</span></p>
</td>
</tr>
<tr aria-rowindex="9">
<td data-celllook="4369">
<p><b><span data-contrast="auto">Integracja z innymi systemami</span></b></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Tak – zbiera logi z systemów SIEM, IDS, firewalli</span></p>
</td>
<td data-celllook="4369">
<p><span data-contrast="auto">Tak – integracja z LDAP, AD, bazami danych, SIEM</span></p>
</td>
</tr>
</tbody>
</table>
						</div>
				</div>
				<div class="elementor-element elementor-element-b2b34d4 elementor-widget elementor-widget-heading" data-id="b2b34d4" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak wdrożyć Keycloak? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-ff3536d elementor-widget elementor-widget-text-editor" data-id="ff3536d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Integracja Keycloak z systemem SIEM pozwala zwiększyć poziom bezpieczeństwa IT, ponieważ dostarcza dodatkowych informacji o użytkownikach i ich zachowaniu. Dzięki temu organizacje mogą lepiej wykrywać zagrożenia oraz szybciej reagować na incydenty. </span></p><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Jeśli zastanawiasz się jak wdrożyć i skonfigurować Keycloak dla swojej organizacji koniecznie przeczytaj artykuły  „Praktyczne wprowadzenie do Keycloak SSO: Od konfiguracji do integracji” </span><a href="https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/?utm_source=chatgpt.com"><span data-contrast="none">https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/?utm_source=chatgpt.com</span></a><span data-contrast="auto"> oraz „Przewodnik integracji Keycloak: Zabezpieczanie punktów końcowych Java Spring za pomocą Keycloak” </span><span style="font-family: Roboto, sans-serif; font-size: 14.25px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; color: var( --e-global-color-text );">https://inero-software.com/pl/zabezpieczanie-punktow-koncowych-java-spring-za-pomoca-keycloak/</span><span style="text-indent: 0em; color: var( --e-global-color-text );" data-contrast="auto"> .</span><span style="text-indent: 0em; color: var( --e-global-color-text );" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Dostarczają one praktycznych wskazówek dotyczących konfiguracji i integracji Keycloak z różnymi systemami. Co ważne, jedną z kluczowych funkcji Keycloak jest zdolność do integracji z katalogami Lightweight Directory Access Protocol (LDAP), o których pisaliśmy tu </span><a href="https://inero-software.com/pl/integracja-keycloak-i-lightweight-directory-access-protocol/?utm_source=chatgpt.com"><span data-contrast="none">https://inero-software.com/pl/integracja-keycloak-i-lightweight-directory-access-protocol/?utm_source=chatgpt.com</span></a><span data-contrast="auto">. </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p><p data-ccp-border-bottom="0px none #000000" data-ccp-padding-bottom="0px" data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Na rynku dostępnych jest wiele rozwiązań SIEM, dlatego przed podjęciem decyzji warto przeprowadzić audyt bezpieczeństwa w organizacji, aby dokładnie zidentyfikować potencjalne słabe punkty. Wybór i wdrożenie odpowiedniego systemu zarządzania incydentami, wzbogaconego o integrację z Keycloak, pozwoli skuteczniej monitorować zagrożenia i zwiększyć ochronę danych w organizacji.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240,&quot;335572071&quot;:0,&quot;335572072&quot;:0,&quot;335572073&quot;:0,&quot;335572075&quot;:0,&quot;335572076&quot;:0,&quot;335572077&quot;:0,&quot;335572079&quot;:0,&quot;335572080&quot;:0,&quot;335572081&quot;:0,&quot;335572083&quot;:0,&quot;335572084&quot;:0,&quot;335572085&quot;:0,&quot;335572087&quot;:0,&quot;335572088&quot;:0,&quot;335572089&quot;:0,&quot;469789798&quot;:&quot;nil&quot;,&quot;469789802&quot;:&quot;nil&quot;,&quot;469789806&quot;:&quot;nil&quot;,&quot;469789810&quot;:&quot;nil&quot;,&quot;469789814&quot;:&quot;nil&quot;}"> </span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-de50613 elementor-cta--skin-cover elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="de50613" data-element_type="widget" data-widget_type="call-to-action.default">
				<div class="elementor-widget-container">
					<div class="elementor-cta">
					<div class="elementor-cta__bg-wrapper">
				<div class="elementor-cta__bg elementor-bg" style="background-image: url(https://inero-software.com/wp-content/uploads/2024/11/tlo-popup-keycloak-1030x731.png);" role="img" aria-label="tło popup keycloak"></div>
				<div class="elementor-cta__bg-overlay"></div>
			</div>
							<div class="elementor-cta__content">
				
									<h2 class="elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Chcesz wdrożyć Keycloak?					</h2>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Skorzystaj z naszego doświadczenia. Zrealizowaliśmy liczne wdrożenia dla SME oraz dużych organizacji. Chętnie porozmawiamy o możliwościach współpracy. 					</div>
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
					<a class="elementor-cta__button elementor-button elementor-size-" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3e3C_1YeBkt1uCr_qfOnG_N298UgLFwORcSTXigrPfOk0ls3ok-Uw_dSeGCoLdtYsN13GMm-n-">
						Umów spotkanie 					</a>
					</div>
							</div>
						</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-951e079 e-con-full e-flex e-con e-child" data-id="951e079" data-element_type="container">
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/systemy-security-information-and-event-management-dlaczego-warto-dodac-do-nich-keycloak/">Systemy Security Information and Event Management. Dlaczego warto dodać do nich Keycloak?</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6923</post-id>	</item>
		<item>
		<title>Migracja Keycloak: Porady i najlepsze praktyki</title>
		<link>https://inero-software.com/pl/migracja-keycloak-porady-i-najlepsze-praktyki/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Tue, 28 Jan 2025 14:32:55 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[aktualizacja]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[migracja]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=6817</guid>

					<description><![CDATA[<p>W tym tekście przedstawiamy najważniejsze zmiany wprowadzone w najnowszych wersjach Keycloak oraz ich wpływ na proces migracji.</p>
<p>Artykuł <a href="https://inero-software.com/pl/migracja-keycloak-porady-i-najlepsze-praktyki/">Migracja Keycloak: Porady i najlepsze praktyki</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="6817" class="elementor elementor-6817" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-bc9a077 e-flex e-con-boxed e-con e-parent" data-id="bc9a077" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-bef05bd e-con-full e-flex e-con e-child" data-id="bef05bd" data-element_type="container">
				</div>
		<div class="elementor-element elementor-element-27ad504 e-con-full e-flex e-con e-child" data-id="27ad504" data-element_type="container">
				<div class="elementor-element elementor-element-e3a7faf elementor-widget elementor-widget-html" data-id="e3a7faf" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-5d77ce3 elementor-widget elementor-widget-text-editor" data-id="5d77ce3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>W tym tekście przedstawiamy najważniejsze zmiany wprowadzone w najnowszych wersjach Keycloak oraz ich wpływ na proces migracji. Pokażemy także przykłady rozwiązywania typowych problemów, które pomogą przejść płynnie na nowsze wersje. Niezależnie od tego, czy chodzi o dostosowanie zaktualizowanych konfiguracji, czy zarządzanie wycofanymi funkcjami, ten artykuł dostarczy Ci praktycznych wskazówek, które usprawnią migrację Keycloak.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-9055b0b elementor-widget elementor-widget-heading" data-id="9055b0b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><strong style="text-indent: 0em;color: var( --e-global-color-primary );text-align: var(--text-align)">Migracja do dystrybucji Quarkus</strong></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-c8c79fe elementor-widget elementor-widget-text-editor" data-id="c8c79fe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Migracja do dystrybucji Quarkus była jednym z najbardziej wymagających procesów dla wielu użytkowników, szczególnie podczas aktualizacji do Keycloak 17, kiedy architektura zmieniła się z WildFly na framework Quarkus. Ta zmiana oznaczała odejście od tradycyjnego modelu serwera aplikacyjnego na rzecz nowoczesnego, lekkiego podejścia dostosowanego do Quarkusa. Konfiguracja Keycloak została całkowicie zmieniona – zamiast wdrażać aplikację na zewnętrznym serwerze aplikacyjnym, działa ona teraz jako samodzielna aplikacja, co znacząco upraszcza proces wdrażania.</p><p>Na przykład custom providers, które wcześniej było dynamicznie pakowane jako moduły dla WildFly, muszą obecnie zostać przebudowane i dostosowane, ponieważ środowisko wykonawcze (runtime) jest niezmienne. Wymaga to modyfikacji zależności, ładowania klas i metod pakowania. Choć ta zmiana upraszcza wdrażanie w środowiskach takich jak Kubernetes, wymusza również zmianę podejścia w pracy zespołów przyzwyczajonych do rozwiązań opartych na WildFly. Przejście na Quarkus zapewnia znaczące korzyści wydajnościowe i nowocześniejsze środowisko deweloperskie, jednak wymaga starannego planowania i testowania, aby migracja przebiegła pomyślnie.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e39fb62 elementor-widget elementor-widget-heading" data-id="e39fb62" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><strong style="text-indent: 0em;color: var( --e-global-color-primary );text-align: var(--text-align)">Kluczowe zmiany wprowadzone w nowych wersjach</strong></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-9267062 elementor-widget elementor-widget-text-editor" data-id="9267062" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Migracja wprowadza istotne zmiany, które wpływają na konfigurację, endpointy oraz implementacje custom providers:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4465d06 elementor-widget elementor-widget-text-editor" data-id="4465d06" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Wymóg HTTPS w trybie produkcyjnym</strong><br />Uruchamianie Keycloak za pomocą polecenia <code>[keycloak_quarkus_root]/26.1.0/bin/kc.bat start</code> wymaga teraz certyfikatu HTTPS, ponieważ opcja <code>start</code> jest przeznaczona do użytku produkcyjnego. Do lokalnego środowiska deweloperskiego należy używać opcji <code>start-dev</code>.</p><p><strong>Usunięcie /auth z podstawowej ścieżki</strong><br />Segment <code>/auth</code> został usunięty z domyślnej podstawowej ścieżki. Aplikacje korzystające z endpointów Keycloak muszą zaktualizować swoje konfiguracje, aby uwzględnić tę zmianę.</p><p><strong>Zmiany w identyfikatorze realm</strong><br />W poprzednich wersjach identyfikator realm był identyczny z jego nazwą. Począwszy od Keycloak 21, identyfikator realm jest teraz unikalną, systemowo generowaną wartością. Aplikacje korzystające z identyfikatorów realm muszą uwzględnić tę zmianę podczas migracji.</p><p><strong>Wycofanie userLocalStorage</strong><br />Custom providers korzystający z metody <code>userLocalStorage</code> interfejsu <code>KeycloakSession</code> muszą przejść na metodę <code>users</code>, ponieważ <code>userLocalStorage</code> została wycofana począwszy od Keycloak 19.</p><p><strong>Transport jdbc-ping jako nowy domyślny</strong><br />W wersji Keycloak 26.1.0 domyślną metodą wykrywania innych węzłów w klastrze stało się korzystanie z bazy danych, zamiast opierania się wyłącznie na multicast. Ta zmiana eliminuje potrzebę dodatkowej konfiguracji sieciowej, szczególnie w środowiskach chmurowych.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f8db805 elementor-widget elementor-widget-heading" data-id="f8db805" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Problemy z głównymi migracjami</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-c547a32 elementor-widget elementor-widget-text-editor" data-id="c547a32" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Podczas migracji Keycloak zdecydowanie zaleca się aktualizowanie wersji krok po kroku, zamiast przeskakiwania przez kilka wydań jednocześnie. Takie stopniowe podejście pozwala na identyfikację i rozwiązywanie problemów na bieżąco, minimalizując ryzyko nieoczekiwanych komplikacji. Przeskakiwanie przez wiele wersji—szczególnie jeśli obejmuje kilkanaście lub więcej wydań—może znacznie skomplikować proces z uwagi na nagromadzone zmiany, wycofane funkcje oraz zmiany w architekturze, takie jak przejście na Quarkus. Realizowanie zmian związanych z kompatybilnością i konfiguracją etapami pozwala na lepszą kontrolę nad migracją oraz redukcję przestojów i zakłóceń w środowiskach produkcyjnych.</p><p>Jednak w wielu przypadkach konieczna staje się duża, jednorazowa migracja, na przykład z Keycloak 12 bezpośrednio do Keycloak 26, co stanowi wyzwanie, które zespoły muszą skutecznie rozwiązać. Proces ten często wiąże się z istotnymi zmianami zarówno w samym serwerze Keycloak, jak i w aplikacjach zależnych, szczególnie w klientach frontendowych korzystających z jego API.</p><p>W tym przewodniku przedstawimy jak podejść do przeprowadzenia takiej dużej migracji.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-45823ad elementor-widget elementor-widget-heading" data-id="45823ad" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Konfiguracja Dockerfile</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-ce32e89 elementor-widget elementor-widget-text-editor" data-id="ce32e89" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W naszym przykładowym projekcie wszystkie niestandardowe motywy oraz rozszerzenia SPI (Service Provider Interface) zostały bezpośrednio skopiowane do bazowego obrazu Keycloak, bez dedykowanego procesu budowania. Było to zrealizowane w standardowy sposób stosowany dla WildFly.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4796eb9 elementor-widget elementor-widget-text-editor" data-id="4796eb9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">quay.io</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak:</span><span style="font-weight: 400;">12.0.2<br /></span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">themes</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">custom-theme </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">jboss</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">themes/custom-theme</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">api-extensions</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">target</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">spi-resource-0</span><span style="font-weight: 400;">.0.1</span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">SNAPSHOT.jar<br /></span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">ENTRYPOINT /</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">jboss</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">tools</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">docker-entrypoint.sh </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">b </span><span style="font-weight: 400;">0.0.0.0</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-b1c75ea elementor-widget elementor-widget-text-editor" data-id="b1c75ea" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Nowe podejście może wykorzystywać proces wieloetapowy z oddzielnymi kontenerami, takimi jak:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-2f2a2de elementor-widget elementor-widget-text-editor" data-id="2f2a2de" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">eclipse-temurin:17-jdk as </span><i><span style="font-weight: 400;">spi_builder</span></i><br /><i><span style="font-weight: 400;">[…]</span></i><br /><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">quay.io</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak:$</span><i><span style="font-weight: 400;">BASE_IMAGE_TAG </span></i><span style="font-weight: 400;">as </span><i><span style="font-weight: 400;">keycloak_builder</span></i><br /><span style="font-weight: 400;">[…]</span><br /><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">quay.io</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak:$</span><i><span style="font-weight: 400;">BASE_IMAGE_TAG</span></i></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-a527627 elementor-widget elementor-widget-text-editor" data-id="a527627" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>SPI jest budowane podczas procesu budowania kontenera przy użyciu narzędzia Maven. Takie podejście zapewnia pobranie zależności oraz optymalizację wygenerowanego pliku JAR do wdrożenia.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0510f11 elementor-widget elementor-widget-text-editor" data-id="0510f11" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">### Runtime dependencies build container</span><br /><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">registry.access.redhat.com</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">ubi9 </span><span style="font-weight: 400;">AS </span><i><span style="font-weight: 400;">runtime_dependencies_builder</span></i><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">mkdir </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">p </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">mnt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">rootfs</span><br /><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">dnf </span><span style="font-weight: 400;">install </span><span style="font-weight: 400;">--</span><span style="font-weight: 400;">installroot </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">mnt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">rootfs curl </span><span style="font-weight: 400;">--</span><span style="font-weight: 400;">releasever </span><span style="font-weight: 400;">9 </span><span style="font-weight: 400;">--</span><span style="font-weight: 400;">setopt install_weak_deps=false </span><span style="font-weight: 400;">--</span><span style="font-weight: 400;">nodocs </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">y \</span><br /><span style="font-weight: 400;">&amp;&amp; </span><span style="font-weight: 400;">dnf </span><span style="font-weight: 400;">--</span><span style="font-weight: 400;">installroot </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">mnt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">rootfs clean all</span><br /><br /><span style="font-weight: 400;">### SPI build container</span><br /><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">eclipse-temurin:17-jdk as </span><i><span style="font-weight: 400;">spi_builder</span></i><br /><span style="font-weight: 400;">ARG </span><i><span style="font-weight: 400;">BASE_IMAGE_TAG</span></i><br /><span style="font-weight: 400;">WORKDIR /</span><span style="font-weight: 400;">workspace</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">app</span><br /><br /><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">api-extensions</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">mvnw .</span><br /><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">api-extensions</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">.mvn .mvn</span><br /><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">api-extensions</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">pom.xml .</span><br /><br /><span style="font-weight: 400;"># dos2unix:</span><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">sed </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">i </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">e </span><span style="font-weight: 400;">'s/\r//g' </span><span style="font-weight: 400;">mvnw</span><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">./mvnw </span><span style="font-weight: 400;">dependency:go-offline</span><br /><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">api-extensions</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">src src</span><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">./mvnw </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">o package </span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">DskipTests</span><br /><span style="font-weight: 400;"> </span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-9851247 elementor-widget elementor-widget-text-editor" data-id="9851247" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Nowy proces kopiuje wiele niestandardowych motywów do Keycloak opartego na Quarkus podczas etapu budowania, zapewniając ich uwzględnienie w finalnym zoptymalizowanym środowisku wykonawczym. Takie podejście poprawia wydajność uruchamiania i jest zgodne z filozofią niezmiennych kontenerów.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0cd6583 elementor-widget elementor-widget-text-editor" data-id="0cd6583" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">### Build container</span><br /><span style="font-weight: 400;">FROM </span><span style="font-weight: 400;">quay.io</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak:$</span><i><span style="font-weight: 400;">BASE_IMAGE_TAG </span></i><span style="font-weight: 400;">as </span><i><span style="font-weight: 400;">keycloak_builder</span></i><br /><span style="font-weight: 400;">COPY --</span><span style="font-weight: 400;">from=</span><i><span style="font-weight: 400;">spi_builder </span></i><span style="font-weight: 400;">/</span><span style="font-weight: 400;">workspace</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">app</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">target</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">spi-resource-0</span><span style="font-weight: 400;">.0.1</span><span style="font-weight: 400;">-</span><span style="font-weight: 400;">SNAPSHOT-jar-with-dependencies.jar </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">providers</span><span style="font-weight: 400;">/</span><br /><br /><span style="font-weight: 400;">#Copy custom themes</span><br /><span style="font-weight: 400;">COPY </span><span style="font-weight: 400;">themes</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">custom-theme </span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">themes</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">custom-theme</span><br /><br /><span style="font-weight: 400;">#Build an optimized server runtime</span><br /><span style="font-weight: 400;">RUN </span><span style="font-weight: 400;">/opt/keycloak/bin/kc.sh </span><span style="font-weight: 400;">build</span><br /><br /><span style="font-weight: 400;">### Runtime container</span><br /><span style="font-weight: 400;">FROM </span><a href="http://quay.io/keycloak/keycloak:$BASE_IMAGE_TAG"><span style="font-weight: 400;">quay.io/keycloak/keycloak:$</span><i><span style="font-weight: 400;">BASE_IMAGE_TAG</span></i></a><br /><span style="font-weight: 400;">COPY --</span><span style="font-weight: 400;">from=</span><i><span style="font-weight: 400;">keycloak_builder </span></i><span style="font-weight: 400;">/</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/ /</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">/</span><br /><span style="font-weight: 400;">WORKDIR /</span><span style="font-weight: 400;">opt</span><span style="font-weight: 400;">/</span><span style="font-weight: 400;">keycloak</span><br /><span style="font-weight: 400;">ENTRYPOINT </span><span style="font-weight: 400;">[</span><span style="font-weight: 400;">"/opt/keycloak/bin/kc.sh"</span><span style="font-weight: 400;">]</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-1dc220a elementor-widget elementor-widget-text-editor" data-id="1dc220a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zasadniczo, wykorzystując budowanie wieloetapowe oraz lekkie obrazy, nowy proces jest zgodny z najlepszymi praktykami dotyczącymi wdrożeń konteneryzowanych. Więcej szczegółów na temat tych kroków znajdziesz tutaj: <a href="https://www.keycloak.org/server/containers">https://www.keycloak.org/server/containers</a>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-15c9000 elementor-widget elementor-widget-heading" data-id="15c9000" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><strong style="text-indent: 0em;color: var( --e-global-color-primary );text-align: var(--text-align)">Zmiana domyślnej ścieżki kontekstu /auth</strong></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-2ff8164 elementor-widget elementor-widget-text-editor" data-id="2ff8164" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Wraz z przejściem na dystrybucję Keycloak opartą na Quarkus, domyślna ścieżka kontekstu została zmodyfikowana – /auth nie jest już domyślnie częścią URL.</p><p>Ta zmiana jest zgodna z celem Quarkusa, jakim jest dostarczenie bardziej zoptymalizowanego i minimalistycznego podejścia do aplikacji webowych, redukując niepotrzebne prefiksy ścieżek.</p><p>Dla użytkowników lub aplikacji, które nadal wymagają ścieżki kontekstu /auth, można ją ponownie wprowadzić za pomocą opcji build http-relative-path.</p><p>Na przykład, uruchamiając Keycloak przy użyciu następującego polecenia, można przywrócić ścieżkę /auth:</p><pre><code class="language-bash">bin/kc.[sh|bat] start-dev --http-relative-path /auth
</code></pre><p><strong>Lub za pomocą Docker Compose:</strong></p>						</div>
				</div>
				<div class="elementor-element elementor-element-2ee41e2 elementor-widget elementor-widget-text-editor" data-id="2ee41e2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">KC_HTTP_RELATIVE_PATH</span><span style="font-weight: 400;">: /auth</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-27a0144 elementor-widget elementor-widget-text-editor" data-id="27a0144" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Pozwala to na zachowanie kompatybilności z istniejącymi klientami lub konfiguracjami, które opierają się na prefiksie /auth. Po określeniu względnej ścieżki Keycloak nadal automatycznie przekieruje żądania z katalogu głównego (np. localhost:8080/) na ścieżkę /auth (np. localhost:8080/auth). Dzięki temu aplikacje lub użytkownicy przyzwyczajeni do wcześniejszej struktury URL mogą nadal działać zgodnie z oczekiwaniami, bez konieczności wprowadzania większych zmian.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-24a1365 elementor-widget elementor-widget-heading" data-id="24a1365" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Zmiany w zarządzaniu dostawcami</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-557e06a elementor-widget elementor-widget-text-editor" data-id="557e06a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Wraz z przejściem na dystrybucję Keycloak opartą na Quarkus, nastąpiły istotne zmiany w sposobie wdrażania i zarządzania <span style="font-weight: 400;">custom providers</span> (SPI). W dystrybucji opartej na WildFly byli oni wdrażani poprzez kopiowanie do katalogu <strong>standalone/deployments</strong>, a zależności umieszczano w określonych lokalizacjach w strukturze serwera WildFly. Jednak w nowej dystrybucji Quarkus model wdrażania został uproszczony — dostosowani dostawcy powinni być teraz kopiowani do katalogu <strong>/providers</strong>.</p><p>Dodatkowo Quarkus nie obsługuje formatu pakowania EAR ani plików <strong>jboss-deployment-structure.xml</strong>, które były powszechnie wykorzystywane w dystrybucji WildFly do konfiguracji wdrożeń i zarządzania zależnościami. W efekcie proces pakowania został uproszczony, ale dostosowane konfiguracje, które wcześniej były realizowane za pomocą tych plików, muszą być teraz obsługiwane w inny sposób.</p><p>Co więcej, jeśli dostosowani dostawcy korzystali z API JavaEE, takich jak sesyjne lub bezstanowe komponenty (session/stateless beans), nie będą one już obsługiwane w dystrybucji Quarkus.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-7391d60 elementor-widget elementor-widget-heading" data-id="7391d60" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><p><strong>Migracja niestandardowych motywów</strong><span style="color: var( --e-global-color-primary );font-family: var( --e-global-typography-primary-font-family ), Sans-serif;font-size: 1.7em;font-weight: var( --e-global-typography-primary-font-weight );text-align: var(--text-align)"></span></p></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-c0ccfee elementor-widget elementor-widget-text-editor" data-id="c0ccfee" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Poprzedni Keycloak korzystał z silnika szablonów FreeMarker do renderowania dynamicznych treści w motywach.<br />Choć podejście to jest nadal stosowane w nowych wersjach (szczególnie w motywach v1 i v2), wprowadzono aktualizacje w składni szablonów oraz strukturze motywów, aby dostosować je do nowej architektury Quarkus. Niestandardowe szablony mogą wymagać dostosowania, aby były kompatybilne z nowszymi wersjami FreeMarker, ponieważ struktura motywów uległa pewnym zmianom.</p><p>Dodatkowo niektóre funkcje i makra szablonów, dostępne w starszych wersjach, takich jak Keycloak 12, mogły zostać wycofane lub zastąpione bardziej wydajnymi odpowiednikami.</p><p>Motywy, które zostały wcześniej dostosowane, prawdopodobnie nie obsługują trybu ciemnego. Aby uniknąć problemów bez konieczności całkowitego ich przepisywania, najprostszym rozwiązaniem jest dodanie opcji <strong>darkMode=false</strong> w pliku <strong>theme.properties</strong>. Co więcej, od wersji 26.1.0 w zakładce <strong>&#8222;Themes&#8221;</strong> pojawiły się przełączniki umożliwiające włączanie trybu ciemnego dla poszczególnych realmów.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a573147 elementor-widget elementor-widget-heading" data-id="a573147" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Dostosowanie nowego serwera Keycloak do współpracy z frontendem klienta w starszej wersji</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-21c6dc8 elementor-widget elementor-widget-text-editor" data-id="21c6dc8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Problemy związane z checkLoginIframe</strong></p><p>W jednym z naszych projektów musieliśmy zaktualizować Keycloak o 14 wersji. Jednak z różnych powodów nie mogliśmy zaktualizować frontendu, który działał na dość starej wersji Angulara oraz bibliotece keycloak-angular. Dlatego teraz omówimy modyfikacje, które musieliśmy wprowadzić, aby przywrócić funkcjonalność procesu logowania.</p><p>Keycloak-angular to biblioteka typu wrapper dla keycloak-js, która ułatwia jego wykorzystanie w aplikacjach Angular. Rozszerza oryginalne funkcjonalności o dodatkowe możliwości i wprowadza nowe metody, które ułatwiają integrację w aplikacjach Angular. Biblioteka oferuje również podstawową implementację AuthGuard, umożliwiając dostosowanie logiki autoryzacji. Dodatkowo można korzystać z HttpClient Interceptor, który dodaje nagłówek autoryzacyjny do wybranych żądań HTTP.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-43ca3b8 elementor-widget elementor-widget-text-editor" data-id="43ca3b8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">"keycloak-angular"</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">"^8.1.0"</span><span style="font-weight: 400;">,</span><br /><span style="font-weight: 400;">"keycloak-js"</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">"^12.0.4"</span><span style="font-weight: 400;">,</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-2699e08 elementor-widget elementor-widget-text-editor" data-id="2699e08" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Po zintegrowaniu nowej wersji Keycloak (26.1.0) ze starym frontendem klienta napotkaliśmy problem, który pojawiał się po zalogowaniu i objawiał się w następujący sposób:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-81f2826 elementor-widget elementor-widget-image" data-id="81f2826" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="480" height="317" src="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-480x317.png" class="attachment-septera-lpbox-2 size-septera-lpbox-2 wp-image-6801" alt="" data-attachment-id="6801" data-permalink="https://inero-software.com/keycloak-migration-made-easy-tips-and-best-practices/2025-01-28/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28.png" data-orig-size="538,317" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2025-01-28" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-300x177.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-91587be elementor-widget elementor-widget-text-editor" data-id="91587be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ta opcja określa, czy Keycloak powinien sprawdzać status logowania za pomocą iframe. Należy jej używać ostrożnie, ponieważ niewłaściwa konfiguracja może prowadzić do problemów, takich jak ciągłe przeładowywanie strony. Nowsze wersje Keycloak mogły ulepszyć lub zmienić sposób zarządzania sesjami, szczególnie w kontekście plików cookie typu cross-site, przepływów uwierzytelniania lub obsługi iframe (setupCheckLoginIframe, check3pCookiesSupported). Te zmiany mogą wpływać na sposób, w jaki frontend obsługuje stany logowania, zwłaszcza jeśli korzysta z przestarzałych metod sprawdzania statusów logowania lub przetwarzania callbacków.</p><p>Biorąc pod uwagę znaczną różnicę wersji między frontendem a serwerem, jednym z przydatnych rozwiązań może być wyłączenie opcji <strong>setupCheckLoginIframe</strong>, co może również pomóc w sytuacjach, gdy po aktualizacji występują nieskończone pętle przekierowań.</p><p>Oto przykład, jak wyłączyć tę opcję podczas inicjalizacji:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f530026 elementor-widget elementor-widget-text-editor" data-id="f530026" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">function </span><span style="font-weight: 400;">initializeKeycloak</span><span style="font-weight: 400;">(keycloak: KeycloakService, permissionsService: PermissionsService) </span><br /><span style="font-weight: 400;">{</span><br /><span style="font-weight: 400;">  </span><span style="font-weight: 400;">return </span><span style="font-weight: 400;">() =&gt;</span><br /><span style="font-weight: 400;">    keycloak.</span><span style="font-weight: 400;">init</span><span style="font-weight: 400;">({</span><br /><br /><span style="font-weight: 400;">  </span> <span style="font-weight: 400;">config</span><span style="font-weight: 400;">: {</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">url</span><span style="font-weight: 400;">: </span><i><span style="font-weight: 400;">environment</span></i><span style="font-weight: 400;">.</span><span style="font-weight: 400;">keycloakUrl</span><span style="font-weight: 400;">,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">realm</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">'test-realm'</span><span style="font-weight: 400;">,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">clientId</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">'test-realm-web'</span><span style="font-weight: 400;">,</span><br /><span style="font-weight: 400;">  </span> <span style="font-weight: 400;">},</span><br /><span style="font-weight: 400;">  </span> <span style="font-weight: 400;">initOptions</span><span style="font-weight: 400;">: {</span><br /><span style="font-weight: 400;">        </span><span style="font-weight: 400;">checkLoginIframe</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">false</span><br /><span style="font-weight: 400;">  </span> <span style="font-weight: 400;">}</span><br /><span style="font-weight: 400;">}).</span><span style="font-weight: 400;">then</span><span style="font-weight: 400;">(() =&gt; permissionsService.</span><span style="font-weight: 400;">init</span><span style="font-weight: 400;">());</span><br /><span style="font-weight: 400;">}</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-eaf0ada elementor-widget elementor-widget-heading" data-id="eaf0ada" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Brak klucza nonce w żądaniu</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-9e105aa elementor-widget elementor-widget-text-editor" data-id="9e105aa" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W nowszych wersjach Keycloak, zgodnie ze specyfikacją OpenID Connect Core 1.0, klucz <strong>nonce</strong> jest teraz dodawany do tokena ID tylko wtedy, gdy parametr ten został uwzględniony w żądaniu autoryzacyjnym. Zgodnie ze specyfikacją, klucz <strong>nonce</strong> jest obowiązkowy w tokenie ID, ale nie powinien być zawarty w tokenach po żądaniu odświeżenia. Wcześniej klucz <strong>nonce</strong> był dodawany do wszystkich tokenów (Access, Refresh i ID) we wszystkich odpowiedziach, w tym także w odpowiedziach odświeżających.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-fc3ca51 elementor-widget elementor-widget-image" data-id="fc3ca51" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="512" height="300" src="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-2-512x300.png" class="attachment-septera-featured-third size-septera-featured-third wp-image-6802" alt="" data-attachment-id="6802" data-permalink="https://inero-software.com/keycloak-migration-made-easy-tips-and-best-practices/2025-01-28-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-2.png" data-orig-size="716,448" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2025-01-28 -2" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-2-300x188.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/01/2025-01-28-2.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-8016f49 elementor-widget elementor-widget-text-editor" data-id="8016f49" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W rezultacie korzystanie ze starszej wersji adaptera <strong>keycloak-js</strong> może powodować problemy z logowaniem, takie jak błędy &#8222;Invalid nonce, clearing token&#8221; lub nieskończone pętle przekierowań po próbach logowania. Aby rozwiązać ten problem, użytkownicy mogą dodać predefiniowany mapper <strong>&#8222;Nonce backwards compatible&#8221;</strong> za pomocą przycisku <strong>&#8222;By Configuration&#8221;</strong> w dedykowanym zakresie klienta. Więcej informacji można znaleźć w oficjalnej dokumentacji Keycloak (<a href="https://www.keycloak.org/docs/latest/upgrading/index.html#nonce-claim-is-only-added-to-the-id-token">https://www.keycloak.org/docs/latest/upgrading/index.html#nonce-claim-is-only-added-to-the-id-token</a>).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5c61c2e elementor-widget elementor-widget-heading" data-id="5c61c2e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><strong style="text-indent: 0em;color: var( --e-global-color-primary );text-align: var(--text-align)">Problemy z przekierowaniem URI po wylogowaniu</strong></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-26180df elementor-widget elementor-widget-text-editor" data-id="26180df" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zgodnie z informacjami zawartymi w notatkach do wydania wersji 18, Keycloak nie obsługuje już parametru <strong>redirect_uri</strong> podczas wylogowywania. Zamiast tego należy używać parametru <strong>post_logout_redirect_uri</strong> wraz z parametrem <strong>client_id</strong> lub <strong>id_token_hint</strong>. W praktyce oznacza to, że podczas wywoływania funkcji wylogowania należy zastąpić <strong>redirect_uri</strong> parametrem <strong>post_logout_redirect_uri</strong>.</p><p>W naszym przypadku (przy użyciu starszej wersji <strong>keycloak-js</strong>) proces wylogowania można zaimplementować w następujący sposób:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a8f685a elementor-widget elementor-widget-text-editor" data-id="a8f685a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><i><span style="font-weight: 400;">window</span></i><span style="font-weight: 400;">.</span><span style="font-weight: 400;">location</span><span style="font-weight: 400;">.</span><span style="font-weight: 400;">replace</span><span style="font-weight: 400;">(</span><span style="font-weight: 400;">this</span><span style="font-weight: 400;">.</span><span style="font-weight: 400;">keycloak</span><span style="font-weight: 400;">[</span><span style="font-weight: 400;">'_instance'</span><span style="font-weight: 400;">][</span><span style="font-weight: 400;">'endpoints'</span><span style="font-weight: 400;">].</span><span style="font-weight: 400;">logout</span><span style="font-weight: 400;">() +</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">   </span><span style="font-weight: 400;">'?post_logout_redirect_uri=' </span><span style="font-weight: 400;">+ </span><span style="font-weight: 400;">encodeURIComponent</span><span style="font-weight: 400;">(</span><i><span style="font-weight: 400;">window</span></i><span style="font-weight: 400;">.</span><span style="font-weight: 400;">location</span><span style="font-weight: 400;">.</span><span style="font-weight: 400;">origin</span><span style="font-weight: 400;">) +</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">   </span><span style="font-weight: 400;">'&amp;client_id=test-realm-web'</span><span style="font-weight: 400;">);</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-d4ca7eb elementor-widget elementor-widget-text-editor" data-id="d4ca7eb" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ta zmiana powinna rozwiązać najczęstsze problemy z przekierowaniami po wylogowaniu z aplikacji.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-20e2094 elementor-widget elementor-widget-heading" data-id="20e2094" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Podsumowanie</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-5633025 elementor-widget elementor-widget-text-editor" data-id="5633025" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W ciągu ostatnich kilku lat Keycloak przeszedł znaczące zmiany, szczególnie te wprowadzone podczas migracji z WildFly na Quarkus. Zmiany te były konieczne dla poprawy wydajności, bardziej efektywnego wykorzystania zasobów oraz lepszej skalowalności.</p><p>Choć proces migracji może wydawać się trudny, jest on zazwyczaj wykonalny, nawet w przypadku starszych wersji. Stopień trudności migracji w dużej mierze zależy jednak od konkretnego przypadku, zwłaszcza od poziomu dostosowania. Na przykład, jeśli motywy były mocno zmodyfikowane w poprzedniej wersji Keycloak, ich dostosowanie do nowszych dystrybucji może wymagać więcej czasu i wysiłku, ponieważ struktura i silniki szablonów uległy zmianie.</p><p>Podobnie integracje z systemami starszej generacji mogą wymagać starannego planowania, aby zapewnić ich kompatybilność z nowszymi wersjami Keycloak. Z drugiej strony, w przypadku standardowych konfiguracji z minimalnym stopniem dostosowania, przejście na nową wersję jest zazwyczaj płynniejsze i szybsze. Proces migracji może być również wspierany przez szczegółową dokumentację oraz społeczność, która znacznie się rozwinęła w ostatnich latach.</p><p>Podsumowując, choć każdy projekt migracyjny niesie ze sobą własne wyzwania, to przy odpowiednim planowaniu i testowaniu przejście na nowszą wersję Keycloak zazwyczaj nie jest zbyt skomplikowane. Długoterminowe korzyści z aktualizacji, takie jak poprawiona wydajność i funkcje bezpieczeństwa, sprawiają, że wysiłek ten jest wart podjęcia.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c667383 elementor-cta--skin-cover elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="c667383" data-element_type="widget" data-widget_type="call-to-action.default">
				<div class="elementor-widget-container">
					<div class="elementor-cta">
					<div class="elementor-cta__bg-wrapper">
				<div class="elementor-cta__bg elementor-bg" style="background-image: url(https://inero-software.com/wp-content/uploads/2024/12/1-1030x1030.png);" role="img" aria-label="1"></div>
				<div class="elementor-cta__bg-overlay"></div>
			</div>
							<div class="elementor-cta__content">
				
									<h2 class="elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Planujesz aktualizację Keycloak?					</h2>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
						Jeśli szukasz partnera, który poprowadzi Cię przez proces aktualizacji to koniecznie skontaktuj się z nami. 					</div>
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item elementor-animated-item--grow">
					<a class="elementor-cta__button elementor-button elementor-size-" href="https://calendar.app.google/CiGcgpfTyvVHDizZ8">
						Zaplanuj rozmowę					</a>
					</div>
							</div>
						</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-bece524 e-con-full e-flex e-con e-child" data-id="bece524" data-element_type="container">
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-54593f6 e-flex e-con-boxed e-con e-parent" data-id="54593f6" data-element_type="container">
					<div class="e-con-inner">
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/migracja-keycloak-porady-i-najlepsze-praktyki/">Migracja Keycloak: Porady i najlepsze praktyki</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6817</post-id>	</item>
		<item>
		<title>Tworzenie niestandardowego uwierzytelniania SMS w Keycloak</title>
		<link>https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Fri, 14 Jun 2024 11:01:51 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[keycaloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[SMS MFA]]></category>
		<category><![CDATA[SPI]]></category>
		<category><![CDATA[uwierzytelnianie]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=5868</guid>

					<description><![CDATA[<p>Artykuł <a href="https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/">Tworzenie niestandardowego uwierzytelniania SMS w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="row"><div class="col-sm-1"></div><div class="col-sm-10">
<p>&nbsp;</p>
<p>Wraz ze wzrostem liczby zagrożeń cybernetycznych, uwierzytelnianie wieloskładnikowe (MFA) stało się dla wielu firm standardem w politykach bezpieczeństwa.  MFA zwiększa ochronę, wymagając od użytkowników weryfikacji tożsamości za pomocą wielu metod. Takie uwierzytelnianie stało się więc standardową praktyk, dodając dodatkową warstwę ochrony.</p>
<p>Wśród różnych metod, uwierzytelnianie oparte na SMS wyróżnia się równowagą między bezpieczeństwem a wygodą użytkownika. Jednak tworzenie niestandardowego uwierzytelnienia SMS w ramach dostawcy tożsamości, takiego jak Keycloak, może być skomplikowanym i złożonym procesem, wymagającym zrozumienia jego architektury i możliwości rozszerzania.</p>
<h3><b>Interfejs Dostawcy Usług (SPI)</b></h3>
<p>Keycloak ma na celu obsługę większości przypadków użycia bez konieczności tworzenia niestandardowego kodu. Oferuje także elastyczność w zakresie dostosowywania. W tym celu Keycloak udostępnia kilka SPI, które pozwalają na wdrażanie własnych rozwiązań. Zamierzamy wdrożyć uwierzytelnianie, które wymaga ważnego kodu SMS. Aby stworzyć tę funkcję, musimy  zaimplementować interfejsy <em>org.keycloak.authentication.AuthenticatorFactory</em> i <em>Authenticator</em>. AuthenticatorFactory jest odpowiedzialny za tworzenie instancji Authenticatora. Oba interfejsy rozszerzają ogólny zestaw interfejsów Provider i ProviderFactory, które są używane przez inne komponenty Keycloak.</p>
<h3><b>Pakietowanie klas</b></h3>
<p>Będziemy pakietować nasze klasy do jednego projektu. Musi on zawierać plik o nazwie <code>org.keycloak.authentication.AuthenticatorFactory</code>, który powinien znajdować się w katalogu <code>META-INF/services/</code>. Plik ten musi zawierać pełne kwalifikowane nazwy klas każdej implementacji <code>AuthenticatorFactory</code>, którą masz w pliku JAR. Na przykład:</p>
<pre><span style="font-weight: 400;">pl.inero.keycloakext.authenticator.sms.SmsAuthenticatorFactory</span>
<span style="font-weight: 400;">pl.inero.keycloakext.authenticator.custom.CustomUsernamePasswordFormFactory</span>
<span style="font-weight: 400;">pl.inero.keycloakext.authenticator.custom.CustomCookieAuthenticatorFactory</span></pre>
<p>Plik <code>services/</code> jest używany przez Keycloak do skanowania dostawców, których musi załadować do systemu.</p>
<p>&nbsp;</p>
<h3><b>CredentialModel i CredentialProvider</b></h3>
<p>Pierwszym krokiem jest skonfigurowanie naszych klas związanych z poświadczeniami, ponieważ numer telefonu użytkownika powinien być przechowywany jako rekord poświadczeń. Jak widać poniżej, klasa <em>Sms2faCredentialData</em> jest prostym kontenerem danych do przechowywania numeru telefonu powiązanego z użytkownikiem.</p>
<pre><span style="font-weight: 400;">public class </span><span style="font-weight: 400;">Sms2faCredentialData {
</span>
<span style="font-weight: 400;">private </span><span style="font-weight: 400;">String phoneNumber</span><span style="font-weight: 400;">;
</span>
<span style="font-weight: 400;">@SuppressWarnings(</span><span style="font-weight: 400;">"unused"</span><span style="font-weight: 400;">) </span><span style="font-weight: 400;">//used for credentials deserialization</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">Sms2faCredentialData() {</span>
<span style="font-weight: 400;">}
</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">Sms2faCredentialData(String phoneNumber) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">this</span><span style="font-weight: 400;">.phoneNumber = phoneNumber</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}
</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getPhoneNumber() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">phoneNumber</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}
</span>
<span style="font-weight: 400;">@SuppressWarnings(</span><span style="font-weight: 400;">"unused"</span><span style="font-weight: 400;">) </span><span style="font-weight: 400;">//used for credentials deserialization</span>
<span style="font-weight: 400;">public void </span><span style="font-weight: 400;">setPhoneNumber(String phoneNumber) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">this</span><span style="font-weight: 400;">.phoneNumber = phoneNumber</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span></pre>
<p>Kolejnym krokiem jest rozszerzenie klasy <em>CredentialModel</em>, która może generować prawidłowy format poświadczeń w bazie danych. Aby obiekty <em>Sms2faCredentialModel</em> były w pełni funkcjonalne, muszą zawierać nie tylko surowe dane JSON odziedziczone po klasie bazowej<strong>,</strong> ale także odmarshallowane obiekty wewnątrz swoich własnych atrybutów. Zapewnia to szeroką dostępność i wykorzystanie poświadczeń, umożliwiając łatwą integrację i obsługę procesów uwierzytelniania.</p>
<pre><span style="font-weight: 400;">public class </span><span style="font-weight: 400;">Sms2faCredentialModel </span><span style="font-weight: 400;">extends </span><span style="font-weight: 400;">CredentialModel {
</span>
<span style="font-weight: 400;">public static final </span><span style="font-weight: 400;">String TYPE = </span><span style="font-weight: 400;">"sms2fa"</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">private </span><span style="font-weight: 400;">Sms2faCredentialData smsCredentials</span><span style="font-weight: 400;">;
</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">Sms2faCredentialModel(Sms2faCredentialData smsCredentials) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">try </span><span style="font-weight: 400;">{</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">this</span><span style="font-weight: 400;">.smsCredentials = smsCredentials</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">setCredentialData(JsonSerialization.writeValueAsString(smsCredentials))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">setUserLabel(</span><span style="font-weight: 400;">"tel: " </span><span style="font-weight: 400;">+ smsCredentials.getPhoneNumber())</span><span style="font-weight: 400;">;
</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">setType(TYPE)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">} </span><span style="font-weight: 400;">catch </span><span style="font-weight: 400;">(IOException e) {</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">throw new </span><span style="font-weight: 400;">RuntimeException(e)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}
</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getPhoneNumber() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">smsCredentials.getPhoneNumber()</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span></pre>
<p>Podobnie jak w przypadku innych dostawców w Keycloak, utworzenie <em>CredentialProvider</em> wymaga obecności odpowiadającej mu <em>CredentialsProviderFactory.</em> Aby spełnić ten wymóg, implementujemy <em>Sms2faCredentialProviderFactory.</em></p>
<pre><span style="font-weight: 400;">public class </span><span style="font-weight: 400;">Sms2faCredentialProviderFactory  </span><span style="font-weight: 400;">implements </span><span style="font-weight: 400;">CredentialProviderFactory&lt;Sms2faCredentialProvider&gt; {</span>

<span style="font-weight: 400;">public static final </span><span style="font-weight: 400;">String PROVIDER_ID = </span><span style="font-weight: 400;">"keycloak-ext-sms2fa"</span><span style="font-weight: 400;">;</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getId() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">PROVIDER_ID</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">CredentialProvider&lt;Sms2faCredentialModel&gt; create(KeycloakSession session) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return new </span><span style="font-weight: 400;">Sms2faCredentialProvider(session)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span></pre>
<p>Interfejs <em>CredentialProvider</em> jest zbudowany z parametrem generycznym, który rozszerza <em>CredentialModel</em>, zapewniając kompatybilność z różnymi typami poświadczeń. Dodatkowo musimy zaimplementować interfejs <em>CredentialInputValidator</em>, co wskazuje Keycloak, że ten dostawca jest przygotowany do uwierzytelniania poświadczeń dla naszego niestandardowego Authenticatora. Chociaż nie będziemy tu omawiać pełnej architektury, dokumentacja Keycloak obejmuje dodatkowe metody.</p>
<p>Nasza implementacja obejmuje funkcje tworzenia i usuwania poświadczeń. Funkcje te wykorzystują menedżera poświadczeń, odpowiedzialnego za przechowywanie i pobieranie poświadczeń, niezależnie od tego, czy są one przechowywane lokalnie, czy w systemach magazynowania federacyjnego.</p>
<pre><span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">CredentialModel createCredential(RealmModel realm</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">UserModel user</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">Sms2faCredentialModel credentialModel) {</span>
<span style="font-weight: 400;">if </span><span style="font-weight: 400;">(credentialModel.getCreatedDate() == </span><span style="font-weight: 400;">null</span><span style="font-weight: 400;">) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">credentialModel.setCreatedDate(Time.currentTimeMillis())</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">return </span><span style="font-weight: 400;">user.credentialManager().createStoredCredential(credentialModel)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public boolean </span><span style="font-weight: 400;">deleteCredential(RealmModel realm</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">UserModel user</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">String credentialId) {</span>
<span style="font-weight: 400;">logger.debugv(</span><span style="font-weight: 400;">"Delete Sms2fa credential. username = {0}, credentialId = {1}"</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">user.getUsername()</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">credentialId)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">return </span><span style="font-weight: 400;">user.credentialManager().removeStoredCredentialById(credentialId)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span></pre>
<p>Dla interfejsu <code>CredentialInputValidator</code> główną metodą do zaimplementowania jest <code>isValid</code>, która sprawdza, czy dane poświadczenie jest ważne dla danego użytkownika w danej domenie (realm). Jest to metoda wywoływana przez Authenticator, gdy chce zweryfikować dane wprowadzone przez użytkownika.</p>
<pre><span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public boolean </span><span style="font-weight: 400;">isValid(RealmModel realm</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">UserModel user</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">CredentialInput credentialInput) {</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">Sms2faCredentialModel credentialModel = getDefaultCredential(session</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">realm</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">user)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">String secretData = credentialModel.getSecretData()</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">return </span><span style="font-weight: 400;">secretData != </span><span style="font-weight: 400;">null </span><span style="font-weight: 400;">&amp;&amp; secretData.equals(credentialInput.getChallengeResponse())</span><span style="font-weight: 400;">;</span></pre>
<p>Teraz powinniśmy mieć wszystko, aby móc przejść do implementacji samego Authenticatora.</p>
<p>&nbsp;</p>
<h3><b>AuthenticatorFactory i Authenticator</b></h3>
<p>Klasa <em>SmsAuthenticatorFactory</em> zawiera logikę potrzebną do skonfigurowania i tworzenia instancji <em>SmsAuthenticator</em>, który wykonuje walidację OTP opartą na SMS. Obsługuje dostosowywanie poprzez kilka konfigurowalnych właściwości.</p>
<pre><span style="font-weight: 400;">supports customization through several configurable properties.</span>
<span style="font-weight: 400;">public class </span><span style="font-weight: 400;">SmsAuthenticatorFactory </span><span style="font-weight: 400;">implements </span><span style="font-weight: 400;">AuthenticatorFactory {</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getId() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">"sms-authenticator"</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getDisplayType() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">"SMS Authentication"</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public </span><span style="font-weight: 400;">String getHelpText() {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return </span><span style="font-weight: 400;">"Validates an OTP sent via SMS to the users mobile phone."</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">(…)</span>
<span style="font-weight: 400;">}</span></pre>
<p>Teraz przejdźmy do samego Authenticatora. Główna metoda, na której się skupimy, to <em>sendChallenge()</em>. Kiedy przepływ jest początkowo wyzwalany, ta metoda jest wywoływana. Ważne jest, aby zauważyć, że nie obsługuje ona przetwarzania formularza kodu SMS. Jej rola polega na renderowaniu strony lub kontynuowaniu przepływu.</p>
<p>Strona HTML, która prosi o wprowadzenie otrzymanego kodu, jest prezentowana użytkownikowi, który następnie wprowadza kod i przesyła go. Wówczas wysyłane jest żądanie HTTP do przepływu za pomocą adresu URL akcji określonego w formularzu HTML. To wyzwala metodę <em>action()</em> w naszej implementacji Authenticatora. Jeśli podany kod jest nieprawidłowy, rekonstruujemy formularz HTML, dodając komunikat o błędzie. Następnie używamy metody <em>failureChallenge()</em>, przekazując powód niepowodzenia. Działa ona podobnie do <em>challenge()</em>, ale dodatkowo loguje błąd, co pomaga wykryć ewentualne możliwości ataku.</p>
<pre><span style="font-weight: 400;">private void </span><span style="font-weight: 400;">sendChallenge(AuthenticationFlowContext context) {</span>
<span style="font-weight: 400;">(…)</span>
<span style="font-weight: 400;">credentialModel.setSecretData(code)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">user.credentialManager().updateStoredCredential(credentialModel)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">AuthenticationSessionModel authSession = context.getAuthenticationSession()</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">authSession.setAuthNote(</span><span style="font-weight: 400;">"ttl"</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">Long.toString(System.currentTimeMillis() + (ttl * </span><span style="font-weight: 400;">1000L</span><span style="font-weight: 400;">)))</span><span style="font-weight: 400;">;</span>

<span style="font-weight: 400;">try </span><span style="font-weight: 400;">{</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">/* sending SMS */</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">context.challenge(context.form().setAttribute(</span><span style="font-weight: 400;">"realm"</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">context.getRealm()).createForm(TPL_CODE))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">} </span><span style="font-weight: 400;">catch </span><span style="font-weight: 400;">(Exception e) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">context.failureChallenge(AuthenticationFlowError.INTERNAL_ERROR</span><span style="font-weight: 400;">,</span>
<span style="font-weight: 400;">            </span> <span style="font-weight: 400;">context.form().setError(</span><span style="font-weight: 400;">"smsAuthSmsNotSent"</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">e.getMessage())</span>
<span style="font-weight: 400;">                    </span> <span style="font-weight: 400;">.createErrorPage(Response.Status.INTERNAL_SERVER_ERROR))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span>

<span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public void </span><span style="font-weight: 400;">action(AuthenticationFlowContext context) {</span>
<span style="font-weight: 400;">(…)</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">Sms2faCredentialModel credentialModel = getCredentialProvider(session).getDefaultCredential(session</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">context.getRealm()</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">user)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">boolean </span><span style="font-weight: 400;">isValid = getCredentialProvider(context.getSession()).isValid(context.getRealm()</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">context.getUser()</span><span style="font-weight: 400;">,</span>
<span style="font-weight: 400;">       new </span><span style="font-weight: 400;">UserCredentialModel(credentialModel.getId()</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">getCredentialProvider(context.getSession()).getType()</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">enteredCode))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">if </span><span style="font-weight: 400;">(isValid) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">if </span><span style="font-weight: 400;">(Long.parseLong(ttl) &lt; System.currentTimeMillis()) {</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">// expired</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">context.failureChallenge(AuthenticationFlowError.EXPIRED_CODE</span><span style="font-weight: 400;">,
</span>
<span style="font-weight: 400;">                </span> <span style="font-weight: 400;">context.form().setError(</span><span style="font-weight: 400;">"smsAuthCodeExpired"</span><span style="font-weight: 400;">).createErrorPage(Response.Status.BAD_REQUEST))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">} </span><span style="font-weight: 400;">else </span><span style="font-weight: 400;">{</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">// valid</span>
<span style="font-weight: 400;">        </span> <span style="font-weight: 400;">context.success()</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">} </span><span style="font-weight: 400;">else </span><span style="font-weight: 400;">{</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">context.getEvent().user(user).error(Errors.INVALID_USER_CREDENTIALS)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">context.failureChallenge(AuthenticationFlowError.INVALID_CREDENTIALS</span><span style="font-weight: 400;">,</span>
<span style="font-weight: 400;">            </span> <span style="font-weight: 400;">context.form().setAttribute(</span><span style="font-weight: 400;">"realm"</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">context.getRealm())</span>
<span style="font-weight: 400;">                    </span> <span style="font-weight: 400;">.setError(</span><span style="font-weight: 400;">"smsAuthCodeInvalid"</span><span style="font-weight: 400;">).createForm(TPL_CODE))</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span></pre>
<h3><b>Authentication Flow</b></h3>
<p>Aby dodać Authenticator do przepływu, administrator musi przejść do Konsoli. W sekcji Uwierzytelnianie (Authentication) i zakładce Przepływy (Flows) powinien zobaczyć istniejące przepływy. Wbudowane przepływy nie mogą być bezpośrednio modyfikowane, więc aby zintegrować nowo utworzony Authenticator, musimy albo zduplikować istniejący przepływ, albo stworzyć nowy od podstaw.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-5841 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/2-3.png" alt="" width="1920" height="1080" srcset="https://inero-software.com/wp-content/uploads/2024/06/2-3.png 1920w, https://inero-software.com/wp-content/uploads/2024/06/2-3-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/2-3-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/2-3-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/2-3-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/2-3-533x300.png 533w" sizes="(max-width: 1920px) 100vw, 1920px" /></p>
<h3><b>Required actions</b></h3>
<p>Jeśli telefon nie jest skonfigurowany, powinniśmy wywołać niestandardowe wymagane działanie. Ponownie, powinniśmy dodać pełną kwalifikowaną nazwę klasy do katalogu <em>META-INF/services</em> i zaimplementować interfejs <em>RequiredActionProvider</em>. Metoda <em>requiredActionChallenge()</em> jest odpowiedzialna za renderowanie HTML, który poprowadzi wymagane działanie.</p>
<pre><span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public void </span><span style="font-weight: 400;">requiredActionChallenge(RequiredActionContext context) {</span>
<span style="font-weight: 400;">LoginFormsProvider form = context.form()</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">if </span><span style="font-weight: 400;">(getSmsAuthenticatorConfig(context) == </span><span style="font-weight: 400;">null</span><span style="font-weight: 400;">) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">form.setError(</span><span style="font-weight: 400;">"smsAuthMissingAuthenticatorConfig"</span><span style="font-weight: 400;">)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">Response response = form.createForm(</span><span style="font-weight: 400;">"sms-2fa-register.ftl"</span><span style="font-weight: 400;">)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">context.challenge(response)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">}</span></pre>
<p>Ta część jest odpowiedzialna za przetwarzanie danych wejściowych z formularza HTML wymaganego działania. Po wprowadzeniu otrzymanego kodu SMS, numer telefonu powinien zostać zapisany w bazie danych jako poświadczenie. Przy następnym logowaniu będziemy mogli skorzystać z tej formy OTP.</p>
<pre><span style="font-weight: 400;">@Override</span>
<span style="font-weight: 400;">public void </span><span style="font-weight: 400;">processAction(RequiredActionContext context) {</span>
<span style="font-weight: 400;">    (…)</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">String phoneNumber = params.getFirst(</span><span style="font-weight: 400;">"phoneNumber"</span><span style="font-weight: 400;">)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">final </span><span style="font-weight: 400;">String code = params.getFirst(</span><span style="font-weight: 400;">"code"</span><span style="font-weight: 400;">)</span><span style="font-weight: 400;">;</span>

<span style="font-weight: 400;">if</span><span style="font-weight: 400;">(StringUtils.isBlank(phoneNumber) &amp;&amp; StringUtils.isBlank(authSession.getAuthNote(</span><span style="font-weight: 400;">"phone_number"</span><span style="font-weight: 400;">))) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">//if no phone number is set, redirect to the first page</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">requiredActionChallenge(context)</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">if </span><span style="font-weight: 400;">(phoneNumber != </span><span style="font-weight: 400;">null</span><span style="font-weight: 400;">) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">sendPhoneNumberVerificationChallenge(context</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">authSession</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">phoneNumber</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;">smsAuthenticatorConfig.getConfig())</span><span style="font-weight: 400;">;</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">return;</span>
<span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">if </span><span style="font-weight: 400;">(code != </span><span style="font-weight: 400;">null</span><span style="font-weight: 400;">) {</span>
<span style="font-weight: 400;">    </span> <span style="font-weight: 400;">/* verify provided SMS code */</span> 
<span style="font-weight: 400;">    </span><span style="font-weight: 400;">}</span>
<span style="font-weight: 400;">}</span></pre>
<p>Ostatnią rzeczą, którą musisz zrobić, jest przejście do Konsoli Administratora i zakładki Wymagane Działania (Required Actions). Twoje nowe działanie powinno teraz być wyświetlone i włączone na liście wymaganych działań.</p>
<p><img loading="lazy" decoding="async" class="wp-image-5840 aligncenter" src="https://inero-software.com/wp-content/uploads/2024/06/1-3-300x169.png" alt="" width="774" height="436" srcset="https://inero-software.com/wp-content/uploads/2024/06/1-3-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/1-3-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/1-3-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/1-3-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/1-3-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/06/1-3.png 1920w" sizes="(max-width: 774px) 100vw, 774px" /></p>
<p>Jeśli użytkownik nie podał wcześniej numeru telefonu, a uwierzytelnianie SMS jest ustawione jako wymagane w przepływie uwierzytelniania, powinna pojawić się nowa widok.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-5842 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/3-3.png" alt="" width="1920" height="1080" srcset="https://inero-software.com/wp-content/uploads/2024/06/3-3.png 1920w, https://inero-software.com/wp-content/uploads/2024/06/3-3-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/3-3-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/3-3-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/3-3-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/3-3-533x300.png 533w" sizes="(max-width: 1920px) 100vw, 1920px" /></p>
<p>Podsumowując, konfiguracja SMS MFA obejmuje ustawienie niestandardowych wymaganych działań oraz dostawców uwierzytelniania, ale oczywiście istnieją inne kwestie do uwzględnienia, takie jak komunikacja między Keycloak a bramką SMS. Zagadnienia, które omówiliśmy w tym poście, to oczywiście tylko część możliwej konfiguracji, ale najważniejsza i specyficzna dla Keycloak.</p>
<p>Jedną z istotnych zalet wdrożenia SMS MFA jest jego powszechna dostępność, ponieważ większość użytkowników posiada telefony komórkowe zdolne do odbierania wiadomości SMS. Dodatkowo, zapewnia to prostą obsługę dla użytkowników, wymagając minimalnej konfiguracji i znajomości. Jednak mechanizm ten ma swoje wady, w tym potencjalne zagrożenia, takie jak ataki polegające na zamianie kart SIM lub przechwytywaniu kodów SMS. Ponadto, dostarczanie wiadomości SMS może czasami być zawodnym procesem, co prowadzi do opóźnień lub nieudanej dostawy, wpływając na doświadczenie użytkownika. Powinniśmy być tego świadomi przed podjęciem decyzji o zastosowaniu tej metody, szczególnie w erze nowszych rozwiązań, takich jak mobilne aplikacje OTP.</p>
<p><a href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/"><img loading="lazy" decoding="async" data-attachment-id="5873" data-permalink="https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/3-6/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/3-4.png" data-orig-size="1200,100" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/3-4-300x25.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/3-4-1030x86.png" tabindex="0" role="button" class="alignnone wp-image-5873 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/3-4.png" alt="" width="1200" height="100" srcset="https://inero-software.com/wp-content/uploads/2024/06/3-4.png 1200w, https://inero-software.com/wp-content/uploads/2024/06/3-4-300x25.png 300w, https://inero-software.com/wp-content/uploads/2024/06/3-4-1030x86.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/3-4-768x64.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></p>
<p></p></div><div class="col-sm-1"></div></div>
<p>Artykuł <a href="https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/">Tworzenie niestandardowego uwierzytelniania SMS w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5868</post-id>	</item>
		<item>
		<title>Przewodnik krok po kroku- Uwierzytelnianie wieloskładnikowe (MFA) w Keycloak</title>
		<link>https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Wed, 05 Jun 2024 13:03:04 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[OTP]]></category>
		<category><![CDATA[relam]]></category>
		<category><![CDATA[sms]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=5812</guid>

					<description><![CDATA[<p>&#160;</p>
<p>Artykuł <a href="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/">Przewodnik krok po kroku- Uwierzytelnianie wieloskładnikowe (MFA) w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>&nbsp;</p>
<div class="row"><div class="col-sm-1"></div><div class="col-sm-10">
<p>Wzrost liczby ataków i zagrożeń cyfrowych sprawił, że zabezpieczanie danych stało się koniecznością. Oszuści wciąż udoskonalają swoje narzędzia, dlatego  tradycyjna metoda polegająca na hasłach okazuje się niewystarczająca do ochrony wrażliwych informacji. Ta eskalacja cyberzagrożeń podkreśliła konieczność wprowadzenia bardziej zaawansowanych środków bezpieczeństwa, co doprowadziło upowszechnienia uwierzytelniania wieloskładnikowego (MFA). W tym wpisie omówimy pojawiające się zagrożenia online i to jak MFA może stać się skutecznym mechanizmem obronnym dla naszych aplikacji.</p>
<p>&nbsp;</p>
<h3>Czym jest MFA?</h3>
<p>Uwierzytelnianie wieloskładnikowe (MFA) zwiększa bezpieczeństwo Twoich aplikacji, wymagając od użytkowników podania wielu form identyfikacji przed przyznaniem dostępu. Oczywiście, narzędzia takie jak Keycloak wspierają MFA i pozwalają administratorom na łatwe skonfigurowanie tego rozwiązania. Ten przewodnik opisuje krok po kroku procedurę włączania MFA w Keycloak, zapewniając, że procesy uwierzytelniania użytkowników staną się bezpieczniejsze,</p>
<p>MFA zostało zaprojektowane, aby chronić użytkowników przed zagrożeniami związanymi z uwierzytelnianiem jednoskładnikowym, gdzie użytkownik musi podać tylko jedną formę uwierzytelnienia, zazwyczaj hasło. MFA dodaje warstwy bezpieczeństwa, wymagając od użytkowników przedstawienia wielu dowodów (czynników) potwierdzających ich tożsamość.</p>
<p>Czynniki uwierzytelniania użytkownika w MFA są zazwyczaj klasyfikowane w trzy typy:</p>
<p style="padding-left: 40px;"><strong>1. Czynniki wiedzy (coś, co wiesz)</strong><br />
&#8211; Hasła<br />
&#8211; PIN-y<br />
&#8211; Pytania bezpieczeństwa<br />
<strong>2. Czynniki posiadania (coś, co masz)</strong><br />
&#8211; Jednorazowe hasło (OTP) generowane przez aplikację uwierzytelniającą<br />
&#8211; Kody SMS<br />
&#8211; Kody e-mail<br />
&#8211; Tokeny sprzętowe<br />
<strong>3. Czynniki inherentne (coś, czym jesteś)</strong><br />
&#8211; Weryfikacja biometryczna (rozpoznawanie twarzy, odcisk palca itp.)</p>
<p><a href="https://inero-software.com/pl/kontakt/"><img loading="lazy" decoding="async" data-attachment-id="5827" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/1-5/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/1-2.png" data-orig-size="1200,100" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/1-2-300x25.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/1-2-1030x86.png" tabindex="0" role="button" class="alignleft wp-image-5827 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/1-2.png" alt="" width="1200" height="100" srcset="https://inero-software.com/wp-content/uploads/2024/06/1-2.png 1200w, https://inero-software.com/wp-content/uploads/2024/06/1-2-300x25.png 300w, https://inero-software.com/wp-content/uploads/2024/06/1-2-1030x86.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/1-2-768x64.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></p>
<p>Pierwszym krokiem jest zawsze początkowe uwierzytelnienie, kiedy użytkownik wprowadza swoją nazwę i hasło (tak zwany czynnik wiedzy). Po początkowym uwierzytelnieniu proszony jest o podanie drugiej formy uwierzytelnienia, która może być jednorazowym hasłem (OTP) wysłanym na telefon, skanem biometrycznym lub inną formą czynnika posiadania/inherentnego. Jeśli oba czynniki zostaną pomyślnie zweryfikowane, użytkownik uzyskuje dostęp do aplikacji. Teraz przyjrzyjmy się kilku przykładowym typom uwierzytelniania oraz ich zaletom i wadom.</p>
<h4 style="padding-left: 40px;"><strong>OTP wysyłane na e-mail</strong></h4>
<p style="padding-left: 80px;">W tej metodzie tymczasowy kod jest wysyłany na zarejestrowany adres e-mail użytkownika, który musi go wprowadzić, aby zakończyć proces logowania. Użytkownicy otrzymują OTP bezpośrednio na e-mail, co nie wymaga instalacji ani konfiguracji dodatkowych aplikacji. Należy jednak pamiętać, że konta e-mail mogą zostać skompromitowane, a przechwycone e-maile mogą stanowić znaczące zagrożenie dla bezpieczeństwa.</p>
<h4 style="padding-left: 40px;">OTP wysyłane SMS-em</h4>
<p style="padding-left: 80px;">Otrzymywanie OTP za pomocą SMS-a jest proste i znane większości użytkowników oraz także nie wymaga instalacji dodatkowych aplikacji. Powinno działać na każdym telefonie komórkowym, co czyni go dostępnym dla szerszej grupy użytkowników. Jednakże, i one mogą być podatne na przechwycenie i ataki polegające na zamianie kart SIM, co sprawia, że są mniej bezpieczne w porównaniu do innych metod. Dostarczanie SMS-ów może być również opóźnione lub nawet zawieść z powodu problemów z siecią. Przyjrzymy się bliżej jego zaletom i wadom w kolejnym poście, który obejmuje rozwój niestandardowych narzędzi uwierzytelniających.</p>
<h4 style="padding-left: 40px;">Powiadomienia push</h4>
<p style="padding-left: 80px;">Powiadomienia push polegają na wysyłaniu w czasie rzeczywistym alertu na zarejestrowane urządzenie mobilne użytkownika, prosząc go o zatwierdzenie lub odrzucenie próby uwierzytelnienia. Użytkownicy są natychmiast powiadamiani o wszelkich próbach logowania, co pozwala im szybko reagować na wszelkie nieautoryzowane próby dostępu. Nie muszą także wprowadzać jednorazowego hasła (OTP), co upraszcza proces uwierzytelniania. Ta metoda oczywiście wymaga aktywnego połączenia internetowego. Należy jednak pamiętać, że zainfekowane urządzenia mogą potencjalnie zagrozić bezpieczeństwu tej funkcji, a użytkownicy muszą być edukowani w zakresie rozpoznawania autentycznych powiadomień push, aby uniknąć przypadkowego zatwierdzenia prób ataku.</p>
<h4 style="padding-left: 40px;"><strong>OTP za pomocą aplikacji uwierzytelniających</strong></h4>
<p style="padding-left: 80px;">OTP generowane przez aplikacje uwierzytelniające, takie jak Google Authenticator, są bardzo bezpieczne, ponieważ są oparte na czasie i trudne do przewidzenia. Mogą generować OTP bez połączenia z internetem, co czyni je niezawodnymi nawet wtedy, gdy użytkownicy są offline. W tym przypadku użytkownicy muszą mieć dostęp do swojego urządzenia mobilnego, aby wygenerować OTP, a początkowa konfiguracja często wymaga zeskanowania kodu QR i skonfigurowania aplikacji uwierzytelniającej, co może być trudne dla użytkowników nietechnicznych.</p>
<p><a href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/"><img loading="lazy" decoding="async" data-attachment-id="5828" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/3-4/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/3-2.png" data-orig-size="1200,100" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/3-2-300x25.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/3-2-1030x86.png" tabindex="0" role="button" class="alignnone wp-image-5828 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/3-2.png" alt="" width="1200" height="100" srcset="https://inero-software.com/wp-content/uploads/2024/06/3-2.png 1200w, https://inero-software.com/wp-content/uploads/2024/06/3-2-300x25.png 300w, https://inero-software.com/wp-content/uploads/2024/06/3-2-1030x86.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/3-2-768x64.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></p>
<h3>Jak skonfigurować OTP (przez mobilną aplikację uwierzytelniającą) w Keycloak</h3>
<p>Teraz możemy przejść do konsoli Keycloak i spróbować skonfigurować podstawowe OTP w naszym realm. <a href="https://inero-software.com/pl/zabezpieczanie-punktow-koncowych-java-spring-za-pomoca-keycloak/">Przed próbą włączenia MFA w Keycloak upewnij się, że masz działającą instancję Keycloak, dostęp administracyjny do serwera oraz podstawową znajomość koncepcji realm, klienta i zarządzania użytkownikami z poprzednich postów.</a></p>
<p><strong>Krok 1: Polityka OTP</strong><br />
Z menu bocznego wybierz realm, w którym chcesz włączyć MFA. W ustawieniach przejdź do sekcji Uwierzytelnianie i wybierz kartę Polityka OTP. Skonfiguruj ustawienia zgodnie z wymaganiami bezpieczeństwa. Możesz wybrać wartości domyślne, które są dostarczane przez serwer.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="5815" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/2-5/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/2-1.png" data-orig-size="1920,1080" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/2-1-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/2-1-1030x579.png" tabindex="0" role="button" class="wp-image-5815 aligncenter" src="https://inero-software.com/wp-content/uploads/2024/06/2-1-300x169.png" alt="" width="705" height="397" srcset="https://inero-software.com/wp-content/uploads/2024/06/2-1-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/2-1-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/2-1-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/2-1-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/2-1-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/06/2-1.png 1920w" sizes="(max-width: 705px) 100vw, 705px" /></p>
<p><strong>Krok 2: Wymagane działania</strong><br />
W ustawieniach uwierzytelniania przejdź do karty Wymagane działania. Teraz możesz aktywować OTP jako domyślne działanie dla każdego nowego użytkownika.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="5814" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/1-4/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/1-1.png" data-orig-size="1920,1080" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/1-1-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/1-1-1030x579.png" tabindex="0" role="button" class="wp-image-5814 aligncenter" src="https://inero-software.com/wp-content/uploads/2024/06/1-1-300x169.png" alt="" width="701" height="395" srcset="https://inero-software.com/wp-content/uploads/2024/06/1-1-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/1-1-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/1-1-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/1-1-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/1-1-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/06/1-1.png 1920w" sizes="(max-width: 701px) 100vw, 701px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="5816" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/3-3/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/3-1.png" data-orig-size="1920,1080" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/3-1-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/3-1-1030x579.png" tabindex="0" role="button" class="wp-image-5816 aligncenter" src="https://inero-software.com/wp-content/uploads/2024/06/3-1-300x169.png" alt="" width="702" height="395" srcset="https://inero-software.com/wp-content/uploads/2024/06/3-1-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/3-1-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/3-1-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/3-1-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/3-1-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/06/3-1.png 1920w" sizes="(max-width: 702px) 100vw, 702px" /></p>
<p>&nbsp;</p>
<p>Skonfigurowaliśmy już MFA i każdy nowo zarejestrowany użytkownik będzie musiał z niego korzystać. Oczywiście, tę konfigurację można zmodyfikować w ustawieniach konta aplikacji, aby użytkownicy korzystali z MFA tylko wtedy, gdy specjalnie o to poproszą.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="5817" data-permalink="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/4-3/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/4-1.png" data-orig-size="1920,1080" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="4" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/4-1-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/4-1-1030x579.png" tabindex="0" role="button" class="wp-image-5817 aligncenter" src="https://inero-software.com/wp-content/uploads/2024/06/4-1-300x169.png" alt="" width="705" height="397" srcset="https://inero-software.com/wp-content/uploads/2024/06/4-1-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/06/4-1-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/4-1-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/06/4-1-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/06/4-1-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/06/4-1.png 1920w" sizes="(max-width: 705px) 100vw, 705px" /></p>
<p>Jak widzimy, MFA to potężne narzędzie do ochrony wrażliwych informacji i zwiększania bezpieczeństwa aplikacji internetowych. Wymagając wielu form weryfikacji, znacznie utrudnia dostęp nieautoryzowanym użytkownikom do kont i systemów, zmniejszając ryzyko związane z uwierzytelnianiem opartym wyłącznie na hasłach. Wdrożenie tego mechanizmu z pewnością pomaga organizacjom w spełnianiu wymogów regulacyjnych i ochronie przed ciągle ewoluującymi zagrożeniami w sieci.</p>
<p>W następnym artykule przyjrzymy się bliżej niestandardowemu uwierzytelnianiu za pomocą SMS dla Keycloak, omawiając jego zalety i wady.</p>
<p></p></div><div class="col-sm-1"></div></div>
<p>Artykuł <a href="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/">Przewodnik krok po kroku- Uwierzytelnianie wieloskładnikowe (MFA) w Keycloak</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5812</post-id>	</item>
		<item>
		<title>Najlepsze praktyki w Keycloak. Zadbaj o bezpieczeństwo w 5 krokach</title>
		<link>https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Mon, 13 May 2024 12:35:16 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[emial]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[optymalizacja procesów biznesowych]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[SSL/TLS]]></category>
		<category><![CDATA[SSO]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=5695</guid>

					<description><![CDATA[<p>Keycloak to narzędzie do zarządzania tożsamością i dostępem, które zapewnia bezpieczeństwo aplikacji i usług webowych. Aby maksymalnie zabezpieczyć swoje środowisko przy jego użyciu, warto wdrożyć najlepsze praktyki. Oto 5 kluczowych kroków, które Ci w tym pomogą.</p>
<p>Artykuł <a href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/">Najlepsze praktyki w Keycloak. Zadbaj o bezpieczeństwo w 5 krokach</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="5695" class="elementor elementor-5695" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-59f4920c e-flex e-con-boxed e-con e-parent" data-id="59f4920c" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-112b6ca elementor-widget elementor-widget-html" data-id="112b6ca" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
					</div>
				</div>
				<div class="elementor-element elementor-element-51a502b elementor-widget elementor-widget-text-editor" data-id="51a502b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>Keycloak to narzędzie do zarządzania tożsamością i dostępem, które zapewnia bezpieczeństwo aplikacji i usług webowych. Aby maksymalnie zabezpieczyć swoje środowisko przy jego użyciu, warto wdrożyć najlepsze praktyki. Oto 5 kluczowych kroków, które Ci w tym pomogą.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-74761ea elementor-widget elementor-widget-heading" data-id="74761ea" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Włącz HTTPS i używaj silnych certyfikatów</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-b8c0093 e-flex e-con-boxed e-con e-parent" data-id="b8c0093" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-65e5e55 e-con-full e-flex e-con e-child" data-id="65e5e55" data-element_type="container">
				<div class="elementor-element elementor-element-46ee0e2 elementor-widget elementor-widget-image" data-id="46ee0e2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="300" src="https://inero-software.com/wp-content/uploads/2024/05/A-1.png" class="attachment-large size-large wp-image-5733" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/05/A-1.png 300w, https://inero-software.com/wp-content/uploads/2024/05/A-1-80x80.png 80w, https://inero-software.com/wp-content/uploads/2024/05/A-1-75x75.png 75w, https://inero-software.com/wp-content/uploads/2024/05/A-1-50x50.png 50w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="5733" data-permalink="https://inero-software.com/best-keycloak-practices/a-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/05/A-1.png" data-orig-size="300,300" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="A" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/05/A-1.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/05/A-1.png" role="button" />													</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-2d0bd5e e-con-full e-flex e-con e-child" data-id="2d0bd5e" data-element_type="container">
				<div class="elementor-element elementor-element-d1c415d elementor-widget elementor-widget-text-editor" data-id="d1c415d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Pierwszym i najważniejszym krokiem jest zapewnienie, że cała komunikacja z serwerem Keycloak odbywa się przez bezpieczny protokół HTTPS. Używanie certyfikatów SSL/TLS od zaufanych dostawców chroni przed przechwyceniem i manipulacją danymi.</p><p><strong>W tym kroku:</strong></p><p>&#8211; Skonfiguruj serwer Keycloak: Ustaw serwer, aby korzystał wyłącznie z HTTPS, odrzucając wszystkie niezaszyfrowane żądania HTTP.</p><p>&#8211; Uaktualnij certyfikaty: Regularnie odnawiaj i uaktualniaj certyfikaty SSL/TLS, aby uniknąć ryzyka wykorzystania przestarzałych kluczy.</p>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-2316ba4 e-flex e-con-boxed e-con e-parent" data-id="2316ba4" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-a303f8a elementor-widget elementor-widget-heading" data-id="a303f8a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zastosuj wieloskładnikowe uwierzytelnianie (Multi-Factor Authentication, MFA)</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-4a47934 e-flex e-con-boxed e-con e-parent" data-id="4a47934" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-be8e926 e-con-full e-flex e-con e-child" data-id="be8e926" data-element_type="container">
				<div class="elementor-element elementor-element-2b348bb elementor-widget elementor-widget-image" data-id="2b348bb" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="300" src="https://inero-software.com/wp-content/uploads/2024/05/B-1.png" class="attachment-large size-large wp-image-5734" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/05/B-1.png 300w, https://inero-software.com/wp-content/uploads/2024/05/B-1-80x80.png 80w, https://inero-software.com/wp-content/uploads/2024/05/B-1-75x75.png 75w, https://inero-software.com/wp-content/uploads/2024/05/B-1-50x50.png 50w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="5734" data-permalink="https://inero-software.com/best-keycloak-practices/b-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/05/B-1.png" data-orig-size="300,300" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="B" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/05/B-1.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/05/B-1.png" role="button" />													</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-5777998 e-con-full e-flex e-con e-child" data-id="5777998" data-element_type="container">
				<div class="elementor-element elementor-element-0acca6e elementor-widget elementor-widget-text-editor" data-id="0acca6e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p class="" data-start="0" data-end="335">Ta funkcja dodaje warstwę bezpieczeństwa poprzez jednoczesne użycie kilku metod weryfikacji tożsamości użytkownika. 2FA (uwierzytelnianie dwuskładnikowe) to popularna forma MFA, która zazwyczaj wymaga od użytkownika podania hasła i potwierdzenia tożsamości za pomocą drugiego składnika, na przykład kodu z aplikacji uwierzytelniającej.</p><p class="" data-start="337" data-end="349">W tym kroku:</p><p class="" data-start="351" data-end="675"><strong data-start="351" data-end="408">Aktywuj uwierzytelnianie wieloskładnikowe w Keycloak:</strong> Włącz MFA dla wszystkich użytkowników, szczególnie tych z dostępem administracyjnym i do danych wrażliwych.<br data-start="516" data-end="519" /><strong data-start="519" data-end="555" data-is-only-node="">Wybierz metody uwierzytelniania:</strong> Keycloak obsługuje różne metody MFA – najczęściej używane to aplikacje uwierzytelniające (np. Microsoft Authenticator).</p>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-0f4f02f e-flex e-con-boxed e-con e-parent" data-id="0f4f02f" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-2f4cded elementor-widget elementor-widget-text-editor" data-id="2f4cded" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Przeczytaj także: </strong></p><ul><li style="list-style-type: none;"><ul><li><a href="https://inero-software.com/pl/przewodnik-krok-po-kroku-uwierzytelnianie-wieloskladnikowe-mfa-w-keycloak/">Przewodnik krok po kroku- Uwierzytelnianie wieloskładnikowe (MFA) w Keycloak</a></li><li><a href="https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/">Tworzenie niestandardowego uwierzytelniania SMS w Keycloak</a></li><li><a href="https://inero-software.com/pl/wdrazanie-uwierzytelniania-wieloskladnikowego-za-pomoca-e-maila-w-keycloak/">Wdrażanie uwierzytelniania wieloskładnikowego za pomocą wiadomości e-mail w Keycloak</a></li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-679a1d1 elementor-widget elementor-widget-heading" data-id="679a1d1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Wprowadź silne polityki haseł i zarządzanie sesjami</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-eb5372b e-flex e-con-boxed e-con e-parent" data-id="eb5372b" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-bcc75f2 e-con-full e-flex e-con e-child" data-id="bcc75f2" data-element_type="container">
				<div class="elementor-element elementor-element-d8c7551 elementor-widget elementor-widget-image" data-id="d8c7551" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="300" src="https://inero-software.com/wp-content/uploads/2024/05/C-1.png" class="attachment-large size-large wp-image-5735" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/05/C-1.png 300w, https://inero-software.com/wp-content/uploads/2024/05/C-1-80x80.png 80w, https://inero-software.com/wp-content/uploads/2024/05/C-1-75x75.png 75w, https://inero-software.com/wp-content/uploads/2024/05/C-1-50x50.png 50w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="5735" data-permalink="https://inero-software.com/best-keycloak-practices/c-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/05/C-1.png" data-orig-size="300,300" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="C" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/05/C-1.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/05/C-1.png" role="button" />													</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-0529c4c e-con-full e-flex e-con e-child" data-id="0529c4c" data-element_type="container">
				<div class="elementor-element elementor-element-886422a elementor-widget elementor-widget-text-editor" data-id="886422a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zarządzanie hasłami i sesjami jest kluczowe dla ochrony tożsamości użytkowników i zapobiegania nieautoryzowanemu dostępowi. Są pierwszą linią obrony przed atakami, takimi jak brute force czy phishing. Keycloak w tym zakresie daje szerokie pole możliwości konfiguracji polityki ustawiania haseł, które są konfigurowalne z poziomu konsoli administracyjnej.</p><p><strong>W tym kroku:</strong></p><p>&#8211; Skonfiguruj politykę haseł: ustal dokładne zasady wyboru haseł, aby wymagały określonej długości, skomplikowania (np. obecność znaków specjalnych, dużych i małych liter) oraz określ czas życia hasła i jego historię.</p><p>&#8211; Ogranicz czas życia sesji: Ustaw krótkie, ale praktyczne czasy życia sesji i tokenów, aby zminimalizować okno dla potencjalnych ataków. Automatyczne wylogowywanie użytkowników po określonym czasie nieaktywności jest ważne dla zapobiegania przypadkowemu pozostawieniu sesji otwartej na współdzielonych lub publicznych urządzeniach.</p>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-12aedc4 e-flex e-con-boxed e-con e-parent" data-id="12aedc4" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-20b75c7 elementor-widget elementor-widget-text-editor" data-id="20b75c7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Przeczytaj także: </strong></p><ul><li style="list-style-type: none;"><ul><li><a href="https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/">Praktyczne wprowadzenie do Keycloak SSO: Od konfiguracji do integracji</a></li><li><a href="https://inero-software.com/pl/wprowadzenie-do-passkey-w-keycloak/">Wpowadzenie do Passkey w Keycloak </a></li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-f6f00d8 elementor-widget elementor-widget-heading" data-id="f6f00d8" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zabezpiecz punkty końcowe API i używaj kontroli dostępu opartej na rolach (RBAC)</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-709dbf0 e-flex e-con-boxed e-con e-parent" data-id="709dbf0" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-b8fc9e2 e-con-full e-flex e-con e-child" data-id="b8fc9e2" data-element_type="container">
				<div class="elementor-element elementor-element-84a3289 elementor-widget elementor-widget-image" data-id="84a3289" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="300" src="https://inero-software.com/wp-content/uploads/2024/05/D-1.png" class="attachment-large size-large wp-image-5736" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/05/D-1.png 300w, https://inero-software.com/wp-content/uploads/2024/05/D-1-80x80.png 80w, https://inero-software.com/wp-content/uploads/2024/05/D-1-75x75.png 75w, https://inero-software.com/wp-content/uploads/2024/05/D-1-50x50.png 50w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="5736" data-permalink="https://inero-software.com/best-keycloak-practices/d-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/05/D-1.png" data-orig-size="300,300" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="D" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/05/D-1.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/05/D-1.png" role="button" />													</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-75033e9 e-con-full e-flex e-con e-child" data-id="75033e9" data-element_type="container">
				<div class="elementor-element elementor-element-72fac30 elementor-widget elementor-widget-text-editor" data-id="72fac30" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Kontrola dostępu oparta na rolach (Role-Based Access Control) pozwala na definiowanie ról, przypisywanie ich użytkownikom i zarządzanie uprawnieniami, co umożliwia kontrolę operacji na API zależnie od roli.</p><h6> </h6><p><strong>W tym kroku:</strong></p><p>Zabezpieczanie punktów końcowych API: Aby zabezpieczyć punkty końcowe API, kluczowe jest zastosowanie odpowiednich mechanizmów autoryzacji i uwierzytelniania:</p><ul><li style="list-style-type: none;"><ul><li>Uwierzytelnianie: Implementuj protokoły uwierzytelniania, takie jak OAuth 2.0 i OpenID Connect, aby użytkownicy i aplikacje musiały udowodnić swoją tożsamość przed uzyskaniem dostępu do API.</li><li>Tokeny dostępu: Wykorzystuj tokeny dostępu (access tokens), które zawierają informacje o uprawnieniach użytkownika, do weryfikacji uprawnień dostępu do różnych zasobów API.</li><li>HTTPS: Zapewnij, że wszystkie żądania do API są przesyłane przez HTTPS, chroniąc dane przed przechwyceniem i modyfikacją.</li></ul></li></ul><p>Kontrola dostępu oparta na rolach (RBAC): Role-Based Access Control pozwala na zarządzanie uprawnieniami użytkowników na podstawie ich ról w organizacji:</p><ul><li style="list-style-type: none;"><ul><li>Definiowanie ról: Ustal role, które odzwierciedlają różne poziomy dostępu w aplikacji, np. administrator, użytkownik, gość itp.</li><li>Przypisywanie ról: Przypisz użytkownikom role, które określają, do jakich zasobów i operacji mogą uzyskać dostęp.</li><li>Zarządzanie uprawnieniami: Skonfiguruj zasady dostępu w Keycloak, aby kontrolować, które operacje mogą być wykonane przez użytkowników z daną rolą na określonych punktach końcowych API.</li></ul></li></ul>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-0e7ac41 e-flex e-con-boxed e-con e-parent" data-id="0e7ac41" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-c72e20d elementor-widget elementor-widget-text-editor" data-id="c72e20d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p> <strong>Przeczytaj także: </strong></p><ul><li style="list-style-type: none;"><ul><li><a href="https://inero-software.com/pl/zabezpieczanie-punktow-koncowych-java-spring-za-pomoca-keycloak/">Przewodnik integracji Keycloak: Zabezpieczanie punktów końcowych Java Spring za pomocą KeycloakWdrażanie uwierzytelniania wieloskładnikowego za pomocą wiadomości e-mail w Keycloak</a></li><li><a href="https://inero-software.com/pl/przewodnik-integracji-keycloak-logowanie-przez-platformy-spolecznosciowe/">Przewodnik integracji Keycloak: Logowanie przez platformy społecznościowe</a></li><li><a href="https://inero-software.com/pl/organizacje-w-keycloak-zarzadzanie-i-personalizacja-autentykacji/">Organizacje w Keycloak: Zarządzanie i personalizacja autentykacji</a></li><li><a href="https://inero-software.com/pl/integracja-keycloak-i-lightweight-directory-access-protocol/">Integracja Keycloak i Lightweight Directory Access Protocol</a></li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-c66c681 elementor-widget elementor-widget-heading" data-id="c66c681" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Regularnie aktualizuj i monitoruj środowisko</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-496def2 e-flex e-con-boxed e-con e-parent" data-id="496def2" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-814d9e5 e-con-full e-flex e-con e-child" data-id="814d9e5" data-element_type="container">
				<div class="elementor-element elementor-element-430f211 elementor-widget elementor-widget-image" data-id="430f211" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="300" src="https://inero-software.com/wp-content/uploads/2024/05/E-1.png" class="attachment-large size-large wp-image-5737" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/05/E-1.png 300w, https://inero-software.com/wp-content/uploads/2024/05/E-1-80x80.png 80w, https://inero-software.com/wp-content/uploads/2024/05/E-1-75x75.png 75w, https://inero-software.com/wp-content/uploads/2024/05/E-1-50x50.png 50w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="5737" data-permalink="https://inero-software.com/best-keycloak-practices/e-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/05/E-1.png" data-orig-size="300,300" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="E" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/05/E-1.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/05/E-1.png" role="button" />													</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-bdf672f e-con-full e-flex e-con e-child" data-id="bdf672f" data-element_type="container">
				<div class="elementor-element elementor-element-bd03d48 elementor-widget elementor-widget-text-editor" data-id="bd03d48" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Aktualizacja i stałe monitorowanie środowiska Keycloak jest niezbędne do utrzymania wysokiej ochrony przed nowymi zagrożeniami i lukami w zabezpieczeniach. Aktualizacje Keycloak pojawiają się co kilka miesięcy, a informacje na ich temat można znaleźć na oficjalnej stronie <a href="https://www.keycloak.org/">projektu lub w dokumentacji Keycloak.</a></p><h6> </h6><p><strong>W tym kroku:</strong></p><p>&#8211; Aktualizacje: Regularnie aktualizuj Keycloak do najnowszych stabilnych wersji.</p><p>&#8211; Monitoring i logowanie: Użyj narzędzi do monitorowania, aby śledzić wszelkie niezwykłe zachowania i szybko reagować na potencjalne incydenty bezpieczeństwa. Skonfiguruj systemy logowania, aby zbierać kluczowe informacje o działaniu systemu. Korzystając na przykład z  Kubernetes, można efektywnie zarządzać i skalować narzędzia do monitorowania i logowania, takie jak Prometheus i ELK Stack. Kubernetes ułatwia wdrażanie i zarządzanie kontenerami z tymi narzędziami, automatyzując ich rozmieszczanie, skalowanie i naprawę, co jest kluczowe dla utrzymania ciągłości działania i bezpieczeństwa w rozproszonych systemach.</p><p>&#8211; Postaw na sprawdzonego Partnera: Jeśli wdrożenie najlepszych praktyk Keycloak wydaje Ci się na tym etapie pracochłonnym procesem, który mocno obciąży Twój zespół, skorzystaj z pomocy specjalistów w tej dziedzinie.</p>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-2a776a9 e-flex e-con-boxed e-con e-parent" data-id="2a776a9" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-e7caf2c elementor-widget elementor-widget-text-editor" data-id="e7caf2c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Przeczytaj także:</strong></p><ul><li style="list-style-type: none;"><ul><li><a href="https://inero-software.com/pl/migracja-keycloak-porady-i-najlepsze-praktyki/">Migracja Keycloak: Porady i najlepsze praktyki</a></li><li><a href="https://inero-software.com/pl/keycloak-wskazowki-dotyczace-monitorowania-i-ochrony-przy-uzyciu-wbudowanych-narzedzi-konfiguracyjnych/">Keycloak: wskazówki dotyczące monitorowania i ochrony przy użyciu wbudowanych narzędzi konfiguracyjnych</a></li><li><a href="https://inero-software.com/pl/jak-tworzyc-i-stosowac-wlasne-motywy-w-keycloak/">Jak tworzyć i stosować własne motywy w Keycloak?</a></li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-2a65d15 elementor-widget elementor-widget-text-editor" data-id="2a65d15" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><a href="https://inero-software.com/pl/keycloak/">Inero Software posiada bogate doświadczenie we wdrażaniu zaawansowanych rozwiązań w dziedzinie cyberbezpieczeństwa. Tworzymy kompleksowe systemy do zarządzania użytkownikami i ich rolami, które są dostosowane do złożonych infrastruktur IT i spełniają wysokie wymagania korporacyjne.</a> Nasz zespół, składający się z ekspertów w dziedzinie cyberbezpieczeństwa, implementuje zaawansowane schematy autoryzacji zgodnie z renomowanymi standardami bezpieczeństwa. Dzięki naszej wiedzy i doświadczeniu, zapewniamy skuteczną ochronę przed zagrożeniami i zgodność z korporacyjną polityką bezpieczeństwa.</p><p><a href="https://inero-software.com/pl/kontakt/">Skontaktuj się z nami, aby poznać możliwości wspólnego wdrożenia najlepszych praktyk Keycloak w Twojej organizacji.</a></p>						</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/">Najlepsze praktyki w Keycloak. Zadbaj o bezpieczeństwo w 5 krokach</a> pochodzi z serwisu <a href="https://inero-software.com/pl">Inero Software - Rozwiązania IT i Konsulting</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5695</post-id>	</item>
	</channel>
</rss>
