<?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>Cyberbezpieczeństwo - Inero Software - Rozwiązania IT i Konsulting</title>
	<atom:link href="https://inero-software.com/pl/tag/cyberbezpieczenstwo/feed/" rel="self" type="application/rss+xml" />
	<link>https://inero-software.com/pl/tag/cyberbezpieczenstwo/</link>
	<description>Tworzymy cyfrowe innowacje</description>
	<lastBuildDate>Wed, 12 Mar 2025 09:06:43 +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>Cyberbezpieczeństwo - Inero Software - Rozwiązania IT i Konsulting</title>
	<link>https://inero-software.com/pl/tag/cyberbezpieczenstwo/</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>Wprowadzenie do Passkey w Keycloak</title>
		<link>https://inero-software.com/pl/wprowadzenie-do-passkey-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Wed, 26 Feb 2025 08:54:28 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[hasło]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[konfiguracja]]></category>
		<category><![CDATA[logowanie]]></category>
		<category><![CDATA[Passkey]]></category>
		<category><![CDATA[passkeys]]></category>
		<category><![CDATA[zarządzanie dostępem i tożsamością]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7441</guid>

					<description><![CDATA[<p>W tym wpisie pokażemy, jak skonfigurować Passkeys w Keycloak. </p>
<p>Artykuł <a href="https://inero-software.com/pl/wprowadzenie-do-passkey-w-keycloak/">Wprowadzenie do Passkey 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="7441" class="elementor elementor-7441" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-55d1eac e-flex e-con-boxed e-con e-parent" data-id="55d1eac" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6093d86 elementor-widget elementor-widget-html" data-id="6093d86" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-05e6799 elementor-widget elementor-widget-text-editor" data-id="05e6799" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>Tradycyjne hasła od dawna stanowią słaby punkt zabezpieczeń cyfrowych. Często te same hasła są wykorzystywane w wielu miejscach, co zwiększa ryzyko ich przejęcia i ułatwia ataki phishingowe. Passkeys to nowoczesne rozwiązanie, które zastępuje hasła kryptograficznymi parami kluczy przypisanymi do konkretnej aplikacji i zarządzanymi przez mechanizmy wbudowane w platformę. Dzięki wykorzystaniu wielu czynników weryfikacyjnych spełniają wymagania MFA (wieloskładnikowego uwierzytelniania) i są zgodne z powszechnie stosowanymi standardami.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-7416163 elementor-widget elementor-widget-text-editor" data-id="7416163" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tym wpisie pokażemy, jak skonfigurować Passkeys na podstawie ustawień Keycloak omówionych we wcześniejszych artykułach (zobacz <a href="https://inero-software.com/pl/zabezpieczanie-punktow-koncowych-java-spring-za-pomoca-keycloak/"><em>Zabezpieczanie endpointów Java Spring za pomocą Keycloak</em></a> lub <a href="https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/"><em>Praktyczne Keycloak SSO: od konfiguracji do integracji</em></a>). Choć Passkeys zapewniają wygodne i bezpieczne logowanie, ich wdrożenie w istniejącym systemie może wiązać się z pewnymi wyzwaniami. Przeprowadzimy Cię przez podstawowy proces konfiguracji. Jeśli chcesz unowocześnić swoją strategię zabezpieczeń, to idealne miejsce, by zacząć.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c1afbd0 elementor-widget elementor-widget-heading" data-id="c1afbd0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak działają Passkeys?</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-848333b elementor-widget elementor-widget-text-editor" data-id="848333b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Passkeys to metoda logowania, zaprojektowana jako bezpieczniejsza i wygodniejsza alternatywa dla tradycyjnych haseł. W przeciwieństwie do nich, które mogą zostać wyłudzone, skradzione lub zapomniane, passkeys eliminują te zagrożenia dzięki wykorzystaniu kryptograficznych par kluczy przechowywanych w zaufanym narzędziu uwierzytelniającym, takim jak smartfon, inne urządzenie lub menedżer haseł. Zamiast ręcznie tworzyć i zapamiętywać hasło, użytkownik korzysta z autoryzowanego narzędzia do generowania i zarządzania passkey.</p><p>Passkey składa się z dwóch elementów:</p><ul><li style="list-style-type: none;"><ul><li><strong>Klucz publiczny</strong> – przechowywany przez aplikację</li><li><strong>Klucz prywatny</strong> – bezpiecznie zapisany w narzędziu uwierzytelniającym użytkownika</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-40bb800 elementor-widget elementor-widget-text-editor" data-id="40bb800" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Klucz prywatny nigdy nie opuszcza urządzenia, co gwarantuje, że nawet w przypadku naruszenia klucza publicznego konta pozostają bezpieczne.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-349583e elementor-widget elementor-widget-text-editor" data-id="349583e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ol><li>Podczas logowania aplikacja wysyła wyzwanie do narzędzia uwierzytelniającego.</li><li>Użytkownik potwierdza swoją tożsamość za pomocą biometrii (Face ID, Touch ID), kodu PIN lub hasła.</li><li>Narzędzie uwierzytelniające podpisuje wyzwanie kluczem prywatnym i odsyła je do weryfikacji.</li><li>Jeśli podpis jest poprawny, dostęp zostaje przyznany – bez konieczności używania hasła.</li></ol>						</div>
				</div>
				<div class="elementor-element elementor-element-1621f94 elementor-widget elementor-widget-image" data-id="1621f94" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="1030" height="425" src="https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-1030x425.png" class="attachment-large size-large wp-image-7419" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-1030x425.png 1030w, https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-300x124.png 300w, https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-768x317.png 768w, https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-1536x634.png 1536w, https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-727x300.png 727w, https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema.png 1920w" sizes="(max-width: 1030px) 100vw, 1030px" data-attachment-id="7419" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/passkeys-in-keycloak-schema/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema.png" data-orig-size="1920,792" 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="passkeys in keycloak schema" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-300x124.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/passkeys-in-keycloak-schema-1030x425.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-3000e74 elementor-widget elementor-widget-heading" data-id="3000e74" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zalety Passkeys</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-b64357e elementor-widget elementor-widget-text-editor" data-id="b64357e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li>W przeciwieństwie do haseł, passkeys nie mogą zostać skradzione w wyniku ataków phishingowych. Są powiązane z konkretną stroną internetową lub aplikacją, co oznacza, że nie zadziałają na fałszywych stronach logowania. Nawet jeśli użytkownik wejdzie na stronę phishingową, nie zostanie poproszony o użycie passkey, a logowanie nie nastąpi, co zapobiega kradzieży danych uwierzytelniających.</li><li>Użytkownicy nie muszą zarządzać wieloma hasłami do różnych kont – logowanie sprowadza się do użycia biometrii (Face ID, Touch ID) lub kodu PIN urządzenia.</li><li>Hasła można odgadnąć, ponownie wykorzystać lub wyciekają – passkeys nie. Nawet niektóre metody 2FA, takie jak kody SMS, są podatne na phishing i ataki typu SIM-swapping, podczas gdy passkeys są na nie odporne. Dzięki wykorzystaniu kryptografii klucza publicznego nie mogą zostać przechwycone ani skradzione w wyniku naruszenia danych.</li><li>Passkeys są przechowywane w platformowych narzędziach uwierzytelniających (np. Google Password Manager, Windows Hello). Mogą być automatycznie synchronizowane między urządzeniami, co zapewnia dostęp bez potrzeby ręcznego przenoszenia kluczy.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-965d082 elementor-widget elementor-widget-heading" data-id="965d082" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Ograniczenia Passkeys</h3>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-dcd18fa e-flex e-con-boxed e-con e-parent" data-id="dcd18fa" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-fba9537 elementor-widget elementor-widget-text-editor" data-id="fba9537" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li style="list-style-type: none;"><ul><li><p>Nie wszystkie strony internetowe i aplikacje obsługują passkeys, co oznacza, że użytkownicy mogą nadal musieć polegać na hasłach w niektórych usługach.</p></li><li><p>Utrata dostępu do głównego urządzenia lub konta w chmurze może zablokować użytkownika, wymagając opcji odzyskiwania, takich jak urządzenia zapasowe.</p></li><li><p>Wielu użytkowników nie zna jeszcze passkeys, a przejście z haseł wymaga edukacji.</p></li><li><p>Ponieważ passkeys nie wymagają ręcznego wpisywania, użytkownicy mogą odczuwać brak kontroli nad swoimi danymi logowania w porównaniu do tradycyjnego zarządzania hasłami.</p></li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-939f8d6 elementor-widget elementor-widget-heading" data-id="939f8d6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Konfiguracja Passkey dla Realm</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-5d03766 elementor-widget elementor-widget-text-editor" data-id="5d03766" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Keycloak oferuje elastyczne opcje uwierzytelniania, tradycyjnie opierając się na hasłach i uwierzytelnianiu wieloskładnikowym (MFA) z wykorzystaniem jednorazowych kodów (OTP). Jednak wraz z rosnącą popularnością metod bezhasłowych, Keycloak obsługuje również WebAuthn Passwordless (Passkeys). W tej konfiguracji wyłączymy zarówno hasła, jak i uwierzytelnianie OTP, zapewniając, że użytkownicy mogą logować się wyłącznie za pomocą Passkeys.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-eefe7a4 elementor-widget elementor-widget-image" data-id="eefe7a4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="692" height="310" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-241.png" class="attachment-large size-large wp-image-7420" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-241.png 692w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-241-300x134.png 300w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-241-670x300.png 670w" sizes="(max-width: 692px) 100vw, 692px" data-attachment-id="7420" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-241/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-241.png" data-orig-size="692,310" 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-02-241" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-241-300x134.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-241.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-7750103 elementor-widget elementor-widget-text-editor" data-id="7750103" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Kolejność mechanizmów uwierzytelniania określa przebieg logowania w Keycloak. Pozostawiamy uwierzytelnianie za pomocą plików cookie, aby użytkownicy mogli utrzymywać aktywne sesje. Aby obsłużyć uwierzytelnianie zewnętrzne, włączamy <strong>Identity Provider Redirect</strong>, co pozwala na logowanie za pomocą dostawców tożsamości, takich jak Google lub inna instancja Keycloak.</p><p>Następnie konfigurujemy właściwy formularz logowania. Domyślnie <strong>browser flow</strong> w Keycloak obejmuje nazwę użytkownika, hasło i uwierzytelnianie wieloskładnikowe (MFA). Możemy wyłączyć wszystkie te elementy i zastąpić je jednym krokiem – dodaniem <strong>WebAuthn Passwordless Authenticator</strong>, co zapewni, że użytkownicy będą mogli logować się wyłącznie za pomocą Passkeys.</p><p> </p><p>Końcowa konfiguracja powinna wyglądać następująco:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e24f589 elementor-widget elementor-widget-image" data-id="e24f589" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="777" height="655" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-242.png" class="attachment-large size-large wp-image-7421" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-242.png 777w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-242-300x253.png 300w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-242-768x647.png 768w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-242-356x300.png 356w" sizes="(max-width: 777px) 100vw, 777px" data-attachment-id="7421" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-242/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-242.png" data-orig-size="777,655" 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-02-242" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-242-300x253.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-242.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-805cc08 elementor-widget elementor-widget-text-editor" data-id="805cc08" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Gdy <strong>WebAuthn Passwordless Authenticator</strong> zostanie skonfigurowany, kolejnym krokiem jest powiązanie go z przebiegiem logowania w przeglądarce.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b6799ff elementor-widget elementor-widget-image" data-id="b6799ff" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="691" height="219" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-243.png" class="attachment-large size-large wp-image-7422" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-243.png 691w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-243-300x95.png 300w" sizes="(max-width: 691px) 100vw, 691px" data-attachment-id="7422" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-243/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-243.png" data-orig-size="691,219" 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-02-243" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-243-300x95.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-243.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-3dae270 elementor-widget elementor-widget-text-editor" data-id="3dae270" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Teraz pozostaje już tylko wymusić reset hasła dla przykładowego użytkownika, ustawiając wymaganą akcję na <strong>WebAuthn Register Passwordless</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f474406 elementor-widget elementor-widget-image" data-id="f474406" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="721" height="298" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4.png" class="attachment-large size-large wp-image-7423" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4.png 721w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4-300x124.png 300w" sizes="(max-width: 721px) 100vw, 721px" data-attachment-id="7423" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-4/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4.png" data-orig-size="721,298" 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-02-24 4" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4-300x124.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-4.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-64055b7 elementor-widget elementor-widget-text-editor" data-id="64055b7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Po kliknięciu linku w otrzymanym e-mailu Keycloak wyświetli okno dialogowe z instrukcją rejestracji passkey.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c19dcb2 elementor-widget elementor-widget-image" data-id="c19dcb2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="677" height="329" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5.png" class="attachment-large size-large wp-image-7424" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5.png 677w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5-300x146.png 300w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5-617x300.png 617w" sizes="(max-width: 677px) 100vw, 677px" data-attachment-id="7424" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-5/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5.png" data-orig-size="677,329" 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-02-24 5" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5-300x146.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-5.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-dd5a7c2 elementor-widget elementor-widget-text-editor" data-id="dd5a7c2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Wystarczy kliknąć, aby zarejestrować passkey.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9ea11f9 elementor-widget elementor-widget-image" data-id="9ea11f9" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="574" height="231" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6.png" class="attachment-large size-large wp-image-7425" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6.png 574w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6-300x121.png 300w" sizes="(max-width: 574px) 100vw, 574px" data-attachment-id="7425" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-6/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6.png" data-orig-size="574,231" 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-02-24 6" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6-300x121.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-6.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-c0e48a0 elementor-widget elementor-widget-text-editor" data-id="c0e48a0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Na ekranie pojawi się platformowy mechanizm uwierzytelniania urządzenia, prezentujący dostępne opcje potwierdzenia tożsamości użytkownika. Załóżmy, że chcemy skorzystać z <strong>Windows Hello</strong> i zweryfikować tożsamość za pomocą kodu PIN – tego samego, który jest używany do logowania do konta Windows.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-2239416 elementor-widget elementor-widget-image" data-id="2239416" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="532" height="670" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7.png" class="attachment-large size-large wp-image-7426" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7.png 532w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7-238x300.png 238w" sizes="(max-width: 532px) 100vw, 532px" data-attachment-id="7426" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-7/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7.png" data-orig-size="532,670" 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-02-24 7" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7-238x300.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-7.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-4a3627a elementor-widget elementor-widget-image" data-id="4a3627a" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="555" height="359" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8.png" class="attachment-large size-large wp-image-7427" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8.png 555w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8-300x194.png 300w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8-464x300.png 464w" sizes="(max-width: 555px) 100vw, 555px" data-attachment-id="7427" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-8/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8.png" data-orig-size="555,359" 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-02-24 8" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8-300x194.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-8.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-af69320 elementor-widget elementor-widget-text-editor" data-id="af69320" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Passkey powinien być teraz widoczny w sekcji poświadczeń wybranego użytkownika.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-7a17718 elementor-widget elementor-widget-image" data-id="7a17718" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="781" height="480" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24.png" class="attachment-large size-large wp-image-7428" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24.png 781w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-300x184.png 300w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-768x472.png 768w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-488x300.png 488w" sizes="(max-width: 781px) 100vw, 781px" data-attachment-id="7428" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24.png" data-orig-size="781,480" 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-02-24" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-300x184.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-a0801c8 elementor-widget elementor-widget-text-editor" data-id="a0801c8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Teraz możemy przejść do strony logowania w danym <strong>realm</strong> i spróbować użyć passkey zamiast standardowej nazwy użytkownika i hasła.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5b7fcf8 elementor-widget elementor-widget-image" data-id="5b7fcf8" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="586" height="201" src="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9.png" class="attachment-large size-large wp-image-7429" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9.png 586w, https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9-300x103.png 300w" sizes="(max-width: 586px) 100vw, 586px" data-attachment-id="7429" data-permalink="https://inero-software.com/an-introduction-to-passkey-with-keycloak/2025-02-24-9/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9.png" data-orig-size="586,201" 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-02-24 9" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9-300x103.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/02/2025-02-24-9.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-077cb4b elementor-widget elementor-widget-text-editor" data-id="077cb4b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Twój platformowy mechanizm uwierzytelniania powinien ponownie się pojawić, oferując użycie zarejestrowanego passkey.</p><p> </p><p>Passkeys nie są rozwiązaniem idealnym, ale dla większości użytkowników ich zalety przewyższają ograniczenia. Wraz z rosnącą adopcją wiele z tych niedoskonałości zostanie wyeliminowanych. Jednak w krótkim okresie zarówno użytkownicy, jak i organizacje muszą być świadomi potencjalnych wyzwań związanych z ich wdrażaniem.</p><p> </p><p>Organizacje, które chcą zintegrować passkeys ze swoimi systemami uwierzytelniania, mogą skorzystać z narzędzi takich jak <strong>Keycloak</strong>. Dzięki takiej integracji użytkownicy zyskują bezpieczny, bezhasłowy dostęp do aplikacji, przy jednoczesnym wykorzystaniu kluczowych funkcji Keycloak, takich jak <strong>Single Sign-On (SSO), uwierzytelnianie wieloskładnikowe (MFA)</strong> oraz <strong>szczegółowa kontrola dostępu</strong>.</p>						</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/wprowadzenie-do-passkey-w-keycloak/">Wprowadzenie do Passkey 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">7441</post-id>	</item>
		<item>
		<title>Cyberbezpieczeństwo to nie tylko programy antywirusowe</title>
		<link>https://inero-software.com/pl/cyberbezpieczenstwo-to-nie-tylko-programy-antywirusowe/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Tue, 18 Feb 2025 12:19:03 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[ataki typu DDoS]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberataki]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[oprogramowanie]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[programy antywirusowe]]></category>
		<category><![CDATA[ransomware]]></category>
		<category><![CDATA[wirusy]]></category>
		<category><![CDATA[zarządzanie dostępem i tożsamością]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7215</guid>

					<description><![CDATA[<p>Dla wielu osób pierwszym skojarzeniem, gdy mowa o cyberbezpieczeństwa, są programy antywirusowe. Współczesne zagrożenia w cyberprzestrzeni wykraczają jednak znacznie dalej niż tylko klasyczne wirusy komputerowe.</p>
<p>Artykuł <a href="https://inero-software.com/pl/cyberbezpieczenstwo-to-nie-tylko-programy-antywirusowe/">Cyberbezpieczeństwo to nie tylko programy antywirusowe</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="7215" class="elementor elementor-7215" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-12e4585 e-flex e-con-boxed e-con e-parent" data-id="12e4585" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-bc76512 elementor-widget elementor-widget-html" data-id="bc76512" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-3fd29b7 elementor-widget elementor-widget-text-editor" data-id="3fd29b7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4><span class="TextRun SCXW164501490 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW164501490 BCX0">Dla wielu osób pierwszym skojarzeniem</span><span class="NormalTextRun SCXW164501490 BCX0">, gdy mowa o </span><span class="NormalTextRun SpellingErrorV2Themed SCXW164501490 BCX0">cyberbezpieczeństwa</span><span class="NormalTextRun SCXW164501490 BCX0">, są programy antywirusowe. </span><span class="NormalTextRun SCXW164501490 BCX0">Współczesne zagrożenia w cyberprzestrzeni wykraczają</span><span class="NormalTextRun SCXW164501490 BCX0"> jednak znacznie dalej</span> <span class="NormalTextRun SCXW164501490 BCX0">niż</span><span class="NormalTextRun SCXW164501490 BCX0"> tylko</span> <span class="NormalTextRun SCXW164501490 BCX0">klasyczne wirusy komputerowe. Choć oprogramowanie antywirusowe pozostaje ważnym elementem ochrony, skuteczna strategia</span> <span class="NormalTextRun SCXW164501490 BCX0">zapobiegania i ograniczająca ryzyko ataku i utraty danych lub </span><span class="NormalTextRun SCXW164501490 BCX0">pieniędzy</span><span class="NormalTextRun SCXW164501490 BCX0">,</span> <span class="NormalTextRun SCXW164501490 BCX0">musi uwzględniać znacznie szerszy zakres narzędzi i procesów. </span></span><span class="EOP SCXW164501490 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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-2c09ad5 elementor-widget elementor-widget-text-editor" data-id="2c09ad5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW195997264 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW195997264 BCX0">C</span><span class="NormalTextRun SCXW195997264 BCX0">yberprzestępcy</span><span class="NormalTextRun SCXW195997264 BCX0"> mają bardzo szeroki arsenał </span><span class="NormalTextRun SCXW195997264 BCX0">technik i</span><span class="NormalTextRun SCXW195997264 BCX0"> metod ataków</span><span class="NormalTextRun SCXW195997264 BCX0">. W przestrzeni publicznej bardzo często wymieniane są</span><span class="NormalTextRun SCXW195997264 BCX0"> takie </span><span class="NormalTextRun SCXW195997264 BCX0">hasła </span><span class="NormalTextRun SCXW195997264 BCX0">jak </span><span class="NormalTextRun SpellingErrorV2Themed SCXW195997264 BCX0">phishing</span><span class="NormalTextRun SCXW195997264 BCX0">, </span><span class="NormalTextRun SpellingErrorV2Themed SCXW195997264 BCX0">ransomware</span><span class="NormalTextRun SCXW195997264 BCX0">, ataki typu </span><span class="NormalTextRun SpellingErrorV2Themed SCXW195997264 BCX0">DDoS</span><span class="NormalTextRun SCXW195997264 BCX0"> (Distributed </span><span class="NormalTextRun SpellingErrorV2Themed SCXW195997264 BCX0">Denial</span><span class="NormalTextRun SCXW195997264 BCX0"> of Service), czy inżynieria społeczna. </span></span><span class="EOP SCXW195997264 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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-cebf6fb elementor-widget elementor-widget-heading" data-id="cebf6fb" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Na które zagrożenia należy zwrócić szczególną uwagę w 2025? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-242a0b8 elementor-widget elementor-widget-text-editor" data-id="242a0b8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="NormalTextRun SCXW61866030 BCX0">Eksperci w zakresie </span><span class="NormalTextRun SpellingErrorV2Themed SCXW61866030 BCX0">cyberbezpieczeństwa</span><span class="NormalTextRun SCXW61866030 BCX0"> zwracają uwagę, że techniki te wciąż ewoluują i dostosowują się by lepiej wpływać na potencjalne ofiary. W 2025 warto zwrócić uwagę na trzy zagadnienia:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5f32fe9 elementor-widget__width-initial elementor-widget elementor-widget-facebook-embed" data-id="5f32fe9" data-element_type="widget" data-widget_type="facebook-embed.default">
				<div class="elementor-widget-container">
			<div style="min-height: 1px" class="elementor-facebook-widget fb-post" data-href="https://www.facebook.com/IneroSoftware/posts/pfbid0JL2d2Y1vxburNVFv8RYVzBFJKfsMtxtqnjDwnrSYP9njo4TmuG7TKUEYbGA1AWddl" data-show-text="false"></div>		</div>
				</div>
				<div class="elementor-element elementor-element-5d73e56 elementor-widget elementor-widget-heading" data-id="5d73e56" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">Klucze dostępu zastępują hasła </h4>		</div>
				</div>
				<div class="elementor-element elementor-element-26ddf4b elementor-widget elementor-widget-text-editor" data-id="26ddf4b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW212628961 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW212628961 BCX0">H</span><span class="NormalTextRun SCXW212628961 BCX0">asła pozostają słabym ogniwem. Wraz ze wzrostem liczby ataków </span><span class="NormalTextRun SpellingErrorV2Themed SCXW212628961 BCX0">phishingowych</span><span class="NormalTextRun SCXW212628961 BCX0"> i uwierzytelniających firmy przechodzą na klucze dostępu — biometryczne lub kryptograficzne metody uwierzytelniania, które zwiększają bezpieczeństwo i komfort użytkownika. Giganci tacy jak Google i Apple przewodzą tej zmianie.</span></span><span class="EOP SCXW212628961 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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-850c83f elementor-widget elementor-widget-heading" data-id="850c83f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">Phishing staje się hiperpersonalizowany  </h4>		</div>
				</div>
				<div class="elementor-element elementor-element-e3969c5 elementor-widget elementor-widget-text-editor" data-id="e3969c5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW113212297 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW113212297 BCX0">O</span><span class="NormalTextRun SCXW113212297 BCX0">gólne wiadomości e-mail </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113212297 BCX0">phishingowe</span><span class="NormalTextRun SCXW113212297 BCX0"> należą już do przeszłości. Atakujący wykorzystują teraz dogłębne badania i dane z mediów społecznościowych do tworzenia wysoce ukierunkowanych kampanii, które wydają się legalne. Wiadomości generowane przez sztuczną inteligencję naśladują prawdziwe rozmowy, dzięki czemu inżynieria społeczna jest skuteczniejsza. Organizacje muszą inwestować w zaawansowane wykrywanie i świadomość pracowników.</span></span><span class="EOP SCXW113212297 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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-f2cb24e elementor-widget elementor-widget-heading" data-id="f2cb24e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">Deepfakes stanowią rosnące zagrożenie </h4>		</div>
				</div>
				<div class="elementor-element elementor-element-48cf76b elementor-widget elementor-widget-text-editor" data-id="48cf76b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW223832779 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW223832779 BCX0">T</span><span class="NormalTextRun SCXW223832779 BCX0">echnologia </span><span class="NormalTextRun SpellingErrorV2Themed SCXW223832779 BCX0">deepfake</span> <span class="NormalTextRun SCXW223832779 BCX0">oparta na AI </span><span class="NormalTextRun SCXW223832779 BCX0">stanowi </span><span class="NormalTextRun SCXW223832779 BCX0">coraz większe</span><span class="NormalTextRun SCXW223832779 BCX0"> zagrożenie dla </span><span class="NormalTextRun SpellingErrorV2Themed SCXW223832779 BCX0">cyberbezpieczeństwa</span><span class="NormalTextRun SCXW223832779 BCX0">. Przestępcy wykorzystują generowane przez sztuczną inteligencję profile podszywające się pod managerów lub inne zaufane osoby, aby ominąć zabezpieczenia i manipulować pracownikami, aby ujawnili poufne informacje. Jedna ze znanych metod polega na stosowaniu filtrów podczas rozmów wideo w celu podszywania się pod kogoś innego w czasie rzeczywistym. Firmy muszą wzmocnić protokoły weryfikacji i </span><span class="NormalTextRun SCXW223832779 BCX0">edukować</span><span class="NormalTextRun SCXW223832779 BCX0"> pracowników w zakresie wykrywania </span><span class="NormalTextRun SpellingErrorV2Themed SCXW223832779 BCX0">deepfake&#8217;ów</span><span class="NormalTextRun SCXW223832779 BCX0">.</span></span><span class="EOP SCXW223832779 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-090c57a elementor-widget elementor-widget-heading" data-id="090c57a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Gdy program antywirusowy to za mało  </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-634421f elementor-widget elementor-widget-text-editor" data-id="634421f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="NormalTextRun SCXW93381307 BCX0">Programy antywirusowe to oprogramowanie zaprojektowane do wykrywania, blokowania i usuwania złośliwego oprogramowania, takiego jak wirusy, </span><span class="NormalTextRun SpellingErrorV2Themed SCXW93381307 BCX0">trojany</span><span class="NormalTextRun SCXW93381307 BCX0"> czy spyware. Ich działanie opiera się na bazach danych znanych</span><span class="NormalTextRun SCXW93381307 BCX0"> już</span><span class="NormalTextRun SCXW93381307 BCX0"> zagrożeń</span><span class="NormalTextRun SCXW93381307 BCX0">. Techniki wykorzystywane przez cyberprzestępców</span><span class="NormalTextRun SCXW93381307 BCX0"> ewoluują </span><span class="NormalTextRun SCXW93381307 BCX0">jednak </span><span class="NormalTextRun SCXW93381307 BCX0">w sposób, który znacznie wykracza poza możliwości tradycyjnych programów antywirusowych. Ataki typu </span><span class="NormalTextRun SpellingErrorV2Themed SCXW93381307 BCX0">phishing</span><span class="NormalTextRun SCXW93381307 BCX0">, </span><span class="NormalTextRun SpellingErrorV2Themed SCXW93381307 BCX0">ransomware</span><span class="NormalTextRun SCXW93381307 BCX0">, inżynieria społeczna czy </span><span class="NormalTextRun SpellingErrorV2Themed SCXW93381307 BCX0">deepfake</span><span class="NormalTextRun SCXW93381307 BCX0"> nie są bezpośrednio powiązane z klasycznym złośliwym oprogramowaniem i często wymagają bardziej zaawansowanych metod ochrony.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-7fb7ea2 elementor-widget elementor-widget-heading" data-id="7fb7ea2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Jak zachować bezpieczeństwo? </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-ad58dd6 elementor-widget elementor-widget-text-editor" data-id="ad58dd6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span class="TextRun SCXW164715379 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW164715379 BCX0">Przede wszystkim wdrażając nowoczesne metody uwierzytelniania, zarządzania tożsamościami oraz wykrywania incydentów, które mogą świadczyć o próbie ataku. Obejmuje to zastosowanie wieloskładnikowego uwierzytelniania (MFA), integrację z systemami zarządzania tożsamością jak </span><span class="NormalTextRun SpellingErrorV2Themed SCXW164715379 BCX0">Keycloak</span><span class="NormalTextRun SCXW164715379 BCX0">, oraz monitorowanie aktywności poprzez narzędzia klasy SIEM (Security Information and Event Management). Takie podejście pozwala na bieżąco identyfikować i reagować na nietypowe zachowania, które mogą być oznaką kompromitacji systemu.</span></span><span class="EOP SCXW164715379 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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-dc608e7 elementor-widget elementor-widget-text-editor" data-id="dc608e7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h5><a href="https://inero-software.com/pl/systemy-security-information-and-event-management-dlaczego-warto-dodac-do-nich-keycloak/"><span class="TextRun SCXW151688280 BCX0" lang="PL-PL" xml:lang="PL-PL" data-contrast="auto"><span class="NormalTextRun SCXW151688280 BCX0">O </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW151688280 BCX0">tym</span><span class="NormalTextRun SCXW151688280 BCX0"> dlaczego warto zintegrować </span><span class="NormalTextRun SpellingErrorV2Themed SCXW151688280 BCX0">Keycloak</span><span class="NormalTextRun SCXW151688280 BCX0"> z programem typu Security Information and Event Management (SIEM) pisaliśmy tu.</span></span><span class="EOP SCXW151688280 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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></a></h5>						</div>
				</div>
				<div class="elementor-element elementor-element-1f7db8f elementor-widget elementor-widget-heading" data-id="1f7db8f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zacznij od ułożenia procesu </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-b0838c2 elementor-widget elementor-widget-text-editor" data-id="b0838c2" 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">Dobrze ułożony proces dotyczący cyberbezpieczeństwa zaczyna się od gruntownej oceny ryzyka i identyfikacji zagrożeń. Na tym etapie organizacja dokonuje inwentaryzacji wszystkich zasobów IT, takich jak urządzenia, systemy, aplikacje i dane. Kluczowe jest określenie, które z tych zasobów są najbardziej wrażliwe i wymagają szczególnej ochrony. Następnie należy przeprowadzić analizę ryzyka, która polega na ocenie potencjalnych zagrożeń, ich wpływu na działalność firmy oraz prawdopodobieństwa ich wystąpienia. Dzięki temu można zidentyfikować najważniejsze obszary wymagające ochrony.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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">Kolejnym krokiem jest stworzenie kompleksowej polityki bezpieczeństwa. Obejmuje ona zestaw zasad i procedur regulujących wszystkie aspekty korzystania z technologii w organizacji – od zarządzania hasłami i dostępem do systemów, po zasady korzystania z urządzeń przenośnych i pracy zdalnej. Na tym etapie niezwykle istotne jest uwzględnienie obowiązujących przepisów prawnych, takich jak RODO, oraz standardów branżowych.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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">Po opracowaniu polityk, niezbędne jest wdrożenie odpowiednich technologii zabezpieczających oraz narzędzi jak wspomniany już wcześniej Keycloak. Na tym etapie wprowadzane są do organizacji zabezpieczenia jak uwierzytelnianie wieloskładnikowe (MFA), szyfrowanie danych oraz systemy monitorujące infrastrukturę IT, takie jak SIEM (Security Information and Event Management). Równolegle należy wprowadzić mechanizmy regularnych aktualizacji oprogramowania i tworzenia kopii zapasowych, co pozwala na szybkie przywrócenie systemów w razie incydentu.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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">Opracowując proces, należy mieć świadomość, że często najsłabszym ogniwem zabezpieczeń jest po prostu człowiek. Bardzo ważne jest zwiększanie świadomości pracowników poprzez programy szkoleniowe, które zapoznają ich z różnymi technikami ataków i przykładami z życia wziętymi, pomagając im rozpoznawać różne zagrożenia.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</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-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</span></p>
<p data-ccp-border-between="0px none #000000" data-ccp-padding-between="0px"><span data-contrast="auto">Ostatnim, ale nie mniej ważnym elementem jest monitorowanie i reagowanie na incydenty. Organizacja powinna mieć jasno określone procedury reagowania na naruszenia bezpieczeństwa, które pozwalają na szybkie wykrycie, analizę i minimalizację skutków ataków.&nbsp;</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&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;}">&nbsp;</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-d699b05 elementor-cta--skin-cover elementor-hidden-mobile elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="d699b05" 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">
						Pomożemy Ci wdrożyć Keycloak 					</h2>
				
									<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 pomóc Ci z wdrożeniem oraz kompleksowym utrzymaniem Keycloak w Twojej organizacji. 					</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>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/cyberbezpieczenstwo-to-nie-tylko-programy-antywirusowe/">Cyberbezpieczeństwo to nie tylko programy antywirusowe</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">7215</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>Organizacje w Keycloak: Zarządzanie i personalizacja autentykacji</title>
		<link>https://inero-software.com/pl/organizacje-w-keycloak-zarzadzanie-i-personalizacja-autentykacji/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Thu, 05 Dec 2024 13:26:13 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[digitalizacja]]></category>
		<category><![CDATA[IAM]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[oprogramowanie]]></category>
		<category><![CDATA[organizacje]]></category>
		<category><![CDATA[zarządzanie]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=6437</guid>

					<description><![CDATA[<p>Organizacja w Keycloak reprezentuje podmiot. Może nim być klient lub partner biznesowy. Funkcja ta pozwala na:</p>
<p>Artykuł <a href="https://inero-software.com/pl/organizacje-w-keycloak-zarzadzanie-i-personalizacja-autentykacji/">Organizacje w Keycloak: Zarządzanie i personalizacja autentykacji</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="6437" class="elementor elementor-6437" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-ec3d021 e-flex e-con-boxed e-con e-parent" data-id="ec3d021" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-df86188 e-con-full e-flex e-con e-child" data-id="df86188" data-element_type="container">
				</div>
		<div class="elementor-element elementor-element-535eacc e-con-full e-flex e-con e-child" data-id="535eacc" data-element_type="container">
				<div class="elementor-element elementor-element-e8c961e elementor-widget elementor-widget-html" data-id="e8c961e" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-0e4ca7a elementor-widget elementor-widget-text-editor" data-id="0e4ca7a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>Keycloak w wersji 26 przyniósł kilka ciekawych rozwiązań, które mogą z powodzeniem być wykorzystywane w średnich i dużych przedsiębiorstwach. Jednym z nich jest funkcja „Organizacje”, na której skupimy się w poniższym tekście. Omówimy sposób korzystania, konfiguracji oraz to, w jaki sposób może usprawnić zarządzanie użytkownikami w złożonych środowiskach.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-eda2ae2 elementor-widget elementor-widget-heading" data-id="eda2ae2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Czym są organizacje w Keycloak?</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-9f9e70f elementor-widget elementor-widget-text-editor" data-id="9f9e70f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Organizacja w Keycloak reprezentuje podmiot. Może nim być klient lub partner biznesowy. Funkcja ta pozwala na:</p><ul><li>Przypisywanie użytkowników jako członków konkretnej organizacji.</li><li>Definiowanie dedykowanego administratora dla organizacji.</li><li>Ustalanie specyficznych procesów autentykacji dla każdej organizacji.</li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-608b622 elementor-widget elementor-widget-text-editor" data-id="608b622" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Dzięki zastosowaniu tej funkcji Keycloak umożliwia tworzenie indywidualnych procesów logowania dla różnych klientów w ramach jednego systemu. Na przykład użytkownicy mogą być rozpoznawani na podstawie domeny ich adresu e-mail, co automatycznie kieruje ich do odpowiedniego procesu logowania.</p><p>Funkcjonalność organizacji jest szczególnie istotna w środowiskach korporacyjnych i międzyorganizacyjnych, gdzie zarządzanie użytkownikami jest złożone. Organizacje w Keycloak rozwiązują problem obsługi różnorodnych procesów logowania i personalizacji uwierzytelniania. Przykładowo:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-245a5fb elementor-widget elementor-widget-text-editor" data-id="245a5fb" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ul><li>Firmy świadczące usługi dla wielu klientów mogą tworzyć różne metody logowania i integracji z systemami klientów.</li><li>Organizacje składające się z wielu jednostek biznesowych mogą niezależnie zarządzać użytkownikami i ich uprawnieniami.</li><li>Systemy wymagające federacji z zewnętrznymi dostawcami tożsamości mogą korzystać z dedykowanych flow autentykacji.</li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-965d1fa elementor-widget elementor-widget-heading" data-id="965d1fa" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Organizacje vs. Grupy – jakie są różnice?</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-3655c50 elementor-widget elementor-widget-text-editor" data-id="3655c50" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W Keycloak 26 funkcjonalność organizacji i grup pełni różne role, mimo że oba mechanizmy służą do zarządzania użytkownikami. Organizacje są przeznaczone do obsługi bardziej złożonych scenariuszy, takich jak zarządzanie użytkownikami w kontekście różnych klientów lub partnerów biznesowych. Skupiają się na flow autentykacji oraz federacji tożsamości, umożliwiając precyzyjne dopasowanie procesów uwierzytelniania do potrzeb zewnętrznych podmiotów. Z kolei grupy lepiej sprawdzają się przy organizowaniu użytkowników w ramach jednej aplikacji, na przykład do przypisywania uprawnień lub definiowania dostępu do zasobów.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f7bc14c elementor-widget elementor-widget-image" data-id="f7bc14c" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
														<a href="https://inero-software.com/pl/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach/">
							<img loading="lazy" decoding="async" width="800" height="200" src="https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach.png" class="attachment-large size-large wp-image-6349" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach.png 800w, https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach-300x75.png 300w, https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach-768x192.png 768w" sizes="(max-width: 800px) 100vw, 800px" data-attachment-id="6349" data-permalink="https://inero-software.com/pl/zarzadzanie-tozsamoscia-i-dostepem-jak-przygotowac-sie-do-wdrozenia-systemu-iam-w-przedsiebiorstwie/najlepsze-praktyki-w-keycloak-zadbaj-o-bezpieczenstwo-w-5-krokach-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach.png" data-orig-size="800,200" 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="Najlepsze praktyki w Keycloak. Zadbaj o bezpieczeństwo w 5 krokach" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach-300x75.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/11/Najlepsze-praktyki-w-Keycloak.-Zadbaj-o-bezpieczenstwo-w-5-krokach.png" role="button" />								</a>
													</div>
				</div>
				<div class="elementor-element elementor-element-1a23477 elementor-widget elementor-widget-heading" data-id="1a23477" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Konfiguracja organizacji</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-ab30fd0 elementor-widget elementor-widget-text-editor" data-id="ab30fd0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W przypadku rozbudowanych systemów uwierzytelniania funkcjonalność organizacji pozwala na bardziej precyzyjne zarządzanie użytkownikami i ich dostępem w ramach określonych struktur. W dalszej części artykułu pokażemy, jak krok po kroku skonfigurować organizacje w Keycloak, od aktywacji tej funkcji w ustawieniach realmu, po przypisywanie użytkowników do konkretnych grup.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-7e086f9 elementor-widget elementor-widget-text-editor" data-id="7e086f9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>1. Włączenie funkcjonalności organizacji w realmie</strong><br />Aby skorzystać z funkcji organizacji, należy ją aktywować w ramach ustawień realmu:<br />Przejdź do <strong>Realm Settings</strong> &gt; <strong>General</strong>, a następnie włącz opcję <strong>Switch Organizations</strong>.<br />Po aktywacji w menu po lewej stronie pojawi się nowa zakładka: <strong>Organizations</strong>.</p><p><strong>2. Tworzenie nowej organizacji</strong><br />Wejdź w zakładkę <strong>Organizations</strong>, wybierz <strong>Add Organization</strong>, a następnie wypełnij kluczowe pola:</p><ul><li style="list-style-type: none;"><ul><li><strong>Name</strong>: Unikalna nazwa organizacji, wyświetlana w interfejsie.</li><li><strong>Alias</strong>: Unikalny alias używany w URL&#8217;ach (niezmienny po zapisaniu).</li><li><strong>Redirect URL</strong>: Adres, na który użytkownik zostanie przekierowany po rejestracji lub zaakceptowaniu zaproszenia.</li><li><strong>Domains</strong>: Domena używana do rozpoznawania organizacji na podstawie adresu e-mail użytkownika.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-49f4953 elementor-widget elementor-widget-text-editor" data-id="49f4953" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Automatyczne przypisywanie na podstawie domeny:</strong><br />Podczas logowania użytkownik podaje adres e-mail. Keycloak analizuje jego domenę i automatycznie przypisuje go do odpowiedniej organizacji. Dzięki temu użytkownik korzysta z dedykowanego flow autentykacji. Warto zaznaczyć, że Keycloak obsługuje wildcardy w konfiguracji domen, co pozwala na przypisywanie subdomen (np. *.example.com) do tej samej organizacji.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-837a416 elementor-widget elementor-widget-text-editor" data-id="837a416" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong> 3. Dodawanie użytkowników do organizacji</strong><br />Użytkowników można przypisać do organizacji na kilka sposobów:</p><ul><li style="list-style-type: none;"><ul><li><strong>Istniejący użytkownicy:</strong> Dodaj użytkowników już obecnych w realmie (<strong>Organizations</strong> &gt; <strong>Members</strong> &gt; <strong>Add Realm User</strong>).</li><li><strong>Zaproszenia:</strong> Wyślij zaproszenie do nowego lub istniejącego użytkownika (<strong>Organizations</strong> &gt; <strong>Members</strong> &gt; <strong>Add Member</strong> &gt; <strong>Invite Member</strong>).</li><li><strong>Identity Provider:</strong> Powiąż dostawcę tożsamości z organizacją, aby automatycznie przypisywać użytkowników (<strong>Organizations</strong> &gt; <strong>Identity Providers</strong> &gt; <strong>Link Identity Provider</strong>).</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-eb3d203 elementor-widget elementor-widget-text-editor" data-id="eb3d203" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>4. Wyświetlanie użytkowników w organizacji</strong><br />Lista użytkowników organizacji jest dostępna w sekcji <strong>Organizations &gt; [Nazwa Organizacji] &gt; Members</strong>. Informacja o przynależności do organizacji może być zawarta w tokenach jako claim organization. Dzięki temu aplikacje mogą różnicować uprawnienia użytkowników.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-51a908e elementor-widget elementor-widget-text-editor" data-id="51a908e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>5. Zarządzanie flow autentykacji</strong><br />Organizacje w Keycloak umożliwiają zastosowanie dedykowanych flow autentykacji dla użytkowników.</p><ul><li style="list-style-type: none;"><ul><li><strong>Identity-first login:</strong> Użytkownik podaje najpierw adres e-mail lub nazwę użytkownika, co pozwala Keycloakowi rozpoznać organizację i zastosować dedykowany flow.</li><li><strong>Customizacja flow:</strong> Każda organizacja może mieć własny flow autentykacji, co pozwala dostosować procesy logowania do specyficznych wymagań klientów.</li></ul></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-7e49a18 elementor-widget elementor-widget-text-editor" data-id="7e49a18" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Dzięki zastosowaniu funkcji organizacji Keycloak umożliwia zaawansowaną personalizację w systemach IAM, upraszczając jednocześnie zarządzanie użytkownikami i ich dostępem w złożonych środowiskach.</p>						</div>
				</div>
		<div class="elementor-element elementor-element-425fca2 e-grid e-con-full e-con e-child" data-id="425fca2" data-element_type="container">
				<div class="elementor-element elementor-element-c141544 elementor-widget elementor-widget-image" data-id="c141544" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" src="https://inero-software.com/wp-content/uploads/2024/12/Andrzej-kwadrat.png" title="Andrzej kwadrat" alt="Andrzej kwadrat" loading="lazy" />													</div>
				</div>
				<div class="elementor-element elementor-element-bd8139d elementor-widget elementor-widget-text-editor" data-id="bd8139d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<blockquote><p>Nowa funkcja zarządzania organizacjami w Keycloak umożliwia tworzenie i administrowanie strukturami organizacyjnymi, takimi jak działy czy zespoły, co znacząco może usprawnić procesy takie jak onboarding czy offboarding pracowników oraz kwestie bezpieczeństwa z nimi związane. Przykładowo, podczas onboardingu nowy pracownik może zostać przypisany do odpowiedniej jednostki organizacyjnej, co automatycznie nadaje mu właściwe uprawnienia i dostęp do niezbędnych zasobów, które mogą mieć także charakter tymczasowy (np. dla pracowników tymczasowych). Analogicznie, w przypadku offboardingu usunięcie pracownika z danej jednostki powoduje natychmiastowe cofnięcie jego uprawnień i dostępu do firmowych zasobów, zwiększając tym samym bezpieczeństwo danych. Dzięki tej funkcji zarządzanie dostępami staje się bardziej zautomatyzowane i bezpieczne, co upraszcza procesy kadrowe w organizacji.</p></blockquote><p>dr inż. Andrzej Chybicki CEO Inero Software</p>						</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-77ae6ff e-con-full e-flex e-con e-child" data-id="77ae6ff" data-element_type="container">
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-db58e60 e-flex e-con-boxed e-con e-parent" data-id="db58e60" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-7b0bf1b elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="7b0bf1b" 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/tlo-popup-keycloak-2-1030x731.png);" role="img" aria-label="tło popup keycloak (2)"></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">
						Napisz do nas					</h2>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item">
						Zapewniamy kompleksowe wdrożenie i administrację systemami typu IAM 					</div>
				
									<div class="elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item ">
					<a class="elementor-cta__button elementor-button elementor-size-" href="https://inero-software.com/pl/kontakt/">
						Napisz wiadomość 					</a>
					</div>
							</div>
						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/organizacje-w-keycloak-zarzadzanie-i-personalizacja-autentykacji/">Organizacje w Keycloak: Zarządzanie i personalizacja autentykacji</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">6437</post-id>	</item>
		<item>
		<title>Konsekwencje finansowe dla zarządów w obliczu rosnących zagrożeń cyberbezpieczeństwa</title>
		<link>https://inero-software.com/pl/zarzad-poniesie-konsekwencje-cyberataku/</link>
		
		<dc:creator><![CDATA[Marta Kuprasz]]></dc:creator>
		<pubDate>Fri, 21 Jun 2024 07:57:24 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[digitalizacja]]></category>
		<category><![CDATA[Dyrektywa NIS2]]></category>
		<category><![CDATA[optymalizacja procesów biznesowych]]></category>
		<category><![CDATA[UE]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=5925</guid>

					<description><![CDATA[<p>Artykuł <a href="https://inero-software.com/pl/zarzad-poniesie-konsekwencje-cyberataku/">Konsekwencje finansowe dla zarządów w obliczu rosnących zagrożeń cyberbezpieczeństwa</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>
<h4>Kto powinien ponieść konsekwencje wycieku danych, spowodowanych cyberatakiem? Te pytanie, każde przedsiębiorstwo rozpatrywało dotąd indywidualnie, jednak nowe dyrektywy międzynarodowe, dokładnie określiły kto musi zadbać o wprowadzenie praktyk bezpieczeństwa, a następnie dbać o ich egzekwowanie. Nowy trend związany z dodatkową odpowiedzialnością finansową zarządu, zapoczątkowany w Stanach Zjednoczonych, ma szansę rozprzestrzenić się na kolejne kraje.</h4>
<p>Średnio 1000 zgłoszeń, dotyczących zagrożeń cyberbezpieczeństwa otrzymuje codziennie Zespół Reagowania na Incydenty Bezpieczeństwa Komputerowego CSIRT GOV prowadzony przez Szefa Agencji Bezpieczeństwa Wewnętrznego. Pokazuje to skalę działalności cyberprzestępców.</p>
<p>Celami ataków są głównie pracownicy, w tym managerowie wysokiego szczebla, którzy mają dostęp do poufnych informacji na temat przedsiębiorstwa. Według raportu „2024 Data Breach Investigations Report”, około 68% naruszeń bezpieczeństwa zawierało element ludzki, taki jak błąd użytkownika lub skuteczne ataki socjotechniczne, co pokazuje, że czynnik ludzki nadal jest kluczowym słabym ogniwem w zabezpieczeniach organizacji​.</p>
<p><a href="https://inero-software.com/pl/doradztwo-it/"><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="alignnone 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>Do tej pory trudno było ocenić, kto powinien ponieść konsekwencje cyberataku. Innowacyjny pomysł zgłosił Brad Smith, wiceprezes Microsoftu, podczas przesłuchania komisji w Izbie Reprezentantów w sprawie kwestii bezpieczeństwa firmy. Koncern stanie się jednym z pierwszych przedsiębiorstw, gdzie cyberbezpieczeństwo będzie bezpośrednio wpływało na premie dla kadry kierowniczej.</p>
<blockquote><p><em>Rozszerzenie zasobów połączyliśmy z ważnymi zmianami w zarządzaniu bezpieczeństwem w firmie. Oprócz kluczowej, długoletniej roli Chief Information Security Officer (CISO), stworzyliśmy Office of the CISO z senior-level Deputy CISOs, aby rozszerzyć nadzór nad różnymi zespołami inżynieryjnymi, oceniać i zapewniać, że bezpieczeństwo jest „wbudowane” w procesy podejmowania decyzji inżynieryjnych.</em></p>
<p><em>Ostatecznie zmiana kultury wymaga odpowiedzialności. Jest to coś, co rozumieją wszyscy nasi senior liderzy, zaczynając od Satyi jako CEO firmy. Zamiast delegować ogólną odpowiedzialność za bezpieczeństwo na kogoś innego, przejął on tę odpowiedzialność osobiście, pełniąc rolę głównego dyrektora z pełną odpowiedzialnością za bezpieczeństwo Microsoftu.</em></p>
<p><em>Dlatego też ogłosiliśmy 3 maja, że część wynagrodzenia zespołu Senior Leadership Team będzie uzależniona od postępów w realizacji naszych planów i celów bezpieczeństwa. Od tego czasu pracowaliśmy nad dopracowaniem tych kroków dotyczących wynagrodzenia i innych środków odpowiedzialności na następny rok fiskalny, który zaczyna się 1 lipca</em><a href="#_ftn1" name="_ftnref1">[1]</a>. – mówił Brad Smith przez Komisją Izby Reprezentantów ds. Bezpieczeństwa Wewnętrznego Stanów Zjednoczonych</p></blockquote>
<p>Działania zapoczątkowane przez Microsoft, mają zdaniem analityków szansę stać się trendem globalnym. Jak sytuacja wygląda w Unii Europejskiej, która zwykle wprowadza zmiany wolniej niż Stany Zjednoczone?</p>
<p>Unijne przepisy dotyczące cyberbezpieczeństwa wprowadzone w 2016 r. zostały zaktualizowane <a href="https://eur-lex.europa.eu/eli/dir/2022/2555/oj">dyrektywą NIS2,</a> która weszła w życie w 2023 r. Zmodernizowano w niej istniejące ramy prawne, aby nadążyć za rosnącą cyfryzacją i zmieniającym się krajobrazem zagrożeń dla cyberbezpieczeństwa. Państwa UE mają obowiązek wdrożyć do 17 października tego roku, nowe wytyczne do krajowego porządku prawnego np. przy pomocy ustawy.</p>
<p><a href="https://inero-software.com/pl/mozliwosci-ktore-niesie-rozwoj-i-popularyzacja-sztucznej-inteligencji-w-zarzadzaniu-przedsiebiorstwami/"><img loading="lazy" decoding="async" data-attachment-id="5928" data-permalink="https://inero-software.com/pl/zarzad-poniesie-konsekwencje-cyberataku/banery-inero/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/06/banery-inero.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="banery inero" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/06/banery-inero-300x25.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/06/banery-inero-1030x86.png" tabindex="0" role="button" class="alignnone wp-image-5928 size-full" src="https://inero-software.com/wp-content/uploads/2024/06/banery-inero.png" alt="" width="1200" height="100" srcset="https://inero-software.com/wp-content/uploads/2024/06/banery-inero.png 1200w, https://inero-software.com/wp-content/uploads/2024/06/banery-inero-300x25.png 300w, https://inero-software.com/wp-content/uploads/2024/06/banery-inero-1030x86.png 1030w, https://inero-software.com/wp-content/uploads/2024/06/banery-inero-768x64.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></p>
<p>Według szacunków PwC, nowa dyrektywa obejmie ponad 6000 podmiotów działających w 18 sektorach gospodarki, w Polsce.<a href="#_ftn2" name="_ftnref2">[2]</a></p>
<p>W rozdziale IV <a href="https://eur-lex.europa.eu/eli/dir/2022/2555/oj">dyrektywy</a>, artykuł 20, możemy przeczytać:</p>
<blockquote><p><em>1.   Państwa członkowskie zapewniają, aby organy zarządzające podmiotów kluczowych i ważnych zatwierdzały środki zarządzania ryzykiem w cyberbezpieczeństwie przyjęte przez te podmioty w celu zapewnienia zgodności z art. 21, nadzorowały ich wdrażanie i mogły być pociągnięte do odpowiedzialności za naruszanie przez te podmioty tego artykułu.</em></p>
<p><em>Stosowanie niniejszego ustępu nie narusza przepisów krajowych dotyczących zasad odpowiedzialności instytucji publicznych oraz odpowiedzialności urzędników publicznych oraz urzędników wybranych lub mianowanych.</em></p>
<p><em>2. Państwa członkowskie zapewniają, aby członkowie organu zarządzającego podmiotów kluczowych i ważnych mieli obowiązek odbywać regularne szkolenia w celu zdobycia wystarczającej wiedzy i umiejętności pozwalających im rozpoznać ryzyko i ocenić praktyki zarządzania ryzykiem w cyberbezpieczeństwie oraz ich wpływ na usługi świadczone przez dany podmiot, a także zachęcają podmioty kluczowe i ważne do oferowania podobnych szkoleń ich pracownikom.<a href="#_ftn3" name="_ftnref3"><strong>[3]</strong></a></em></p></blockquote>
<p>Jak widać Komisja Europejska wprowadziła zapis, w którym to kierownictwo wyższego szczebla, w tym członkowie zarządu, ponoszą odpowiedzialność za zapewnienie zgodności organizacji z wymaganiami dotyczącymi zarządzania ryzykiem cybernetycznym oraz zgłaszania incydentów. Dyrektywa nakłada obowiązek, aby osoby na stanowiskach kierowniczych zapewniały odpowiednie środki zabezpieczające i były odpowiedzialne za ich skuteczność.</p>
<p>Dyrektywa NIS2 objęła szeroki zakres podmiotów, zarówno publicznych, jak i prywatnych, które świadczą usługi krytyczne dla funkcjonowania społeczeństwa i gospodarki.</p>
<p><strong>Podmioty objęte dyrektywą:</strong></p>
<p>Podmioty podstawowe (essential entities):</p>
<ul>
<li>Sektory energetyczne (elektryczność, gaz, olej)</li>
<li>Sektory transportowe (lotnictwo, kolej, wodny, drogowy)</li>
<li>Sektory bankowe i infrastruktury rynków finansowych</li>
<li>Sektory zdrowotne (szpitale, dostawcy opieki zdrowotnej)</li>
<li>Woda pitna i gospodarka ściekowa</li>
<li>Infrastruktura cyfrowa (dostawcy usług DNS, rejestry domen, dostawcy chmur obliczeniowych)</li>
<li>Administracja publiczna (podmioty centralne i regionalne)</li>
</ul>
<p>Podmioty ważne (important entities):</p>
<ul>
<li>Poczta i usługi kurierskie</li>
<li>Gospodarka odpadami</li>
<li>Produkcja, produkcja i dystrybucja chemikaliów</li>
<li>Produkcja żywności (podmioty zajmujące się produkcją i przetwórstwem przemysłowym)</li>
<li>Podmioty produkcyjne (produkcja urządzeń medycznych, komputerowych, elektronicznych, pojazdów)</li>
<li>Dostawcy usług cyfrowych (platformy mediów społecznościowych, dostawcy usług wyszukiwarek internetowych)</li>
<li>Organizacje badawcze</li>
</ul>
<p>Podmioty kluczowe i ważne muszą wdrożyć odpowiednie polityki bezpieczeństwa, aby zapewnić systematyczną i dogłębną analizę ryzyka. Polityki te powinny obejmować podejście uwzględniające wszelkie możliwe zagrożenia, w tym te związane z bezpieczeństwem fizycznym (all-hazard approach). Odpowiedzialność za wdrożenie tych polityk spoczywa bezpośrednio na zarządach.</p>
<p>&nbsp;</p>
<h4>Chcesz porozmawiać o cyberbezpieczeństwie Twojej firmy? Napisz do nas</h4>
<p>[contact-form-7]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="#_ftnref1" name="_ftn1">[1]</a> https://blogs.microsoft.com/on-the-issues/2024/06/13/microsofts-work-to-strengthen-cybersecurity-protection/</p>
<p><a href="#_ftnref2" name="_ftn2">[2]</a> https://www.pwc.pl/pl/uslugi/nis2-nowe-wymogi-dotyczace-cyberbezpieczenstwa.html</p>
<p><a href="#_ftnref3" name="_ftn3">[3]</a> https://eur-lex.europa.eu/eli/dir/2022/2555/oj</p>
<p>&nbsp;</p>
<p></p></div><div class="col-sm-1"></div></div>
<p>Artykuł <a href="https://inero-software.com/pl/zarzad-poniesie-konsekwencje-cyberataku/">Konsekwencje finansowe dla zarządów w obliczu rosnących zagrożeń cyberbezpieczeństwa</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">5925</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>
	</channel>
</rss>
