<?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>Keycloak - Inero Software - Rozwiązania IT i Konsulting</title>
	<atom:link href="https://inero-software.com/pl/category/keycloak-pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://inero-software.com/pl/category/keycloak-pl/</link>
	<description>Tworzymy cyfrowe innowacje</description>
	<lastBuildDate>Fri, 21 Mar 2025 11:25:52 +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>Keycloak - Inero Software - Rozwiązania IT i Konsulting</title>
	<link>https://inero-software.com/pl/category/keycloak-pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">153509928</site>	<item>
		<title>Konfiguracja polityki haseł w Keycloak</title>
		<link>https://inero-software.com/pl/konfiguracja-polityki-hasel-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Fri, 21 Mar 2025 11:14:52 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<category><![CDATA[funkcje Keycloak]]></category>
		<category><![CDATA[hasła]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[logowanie]]></category>
		<category><![CDATA[polityka haseł]]></category>
		<category><![CDATA[System IAM]]></category>
		<category><![CDATA[uwierzytelnianie]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=7653</guid>

					<description><![CDATA[<p>W tym artykule najpierw przyjrzymy się wbudowanym mechanizmom zarządzania polityką haseł w Keycloak. Następnie omówimy możliwości ich dostosowania do specyficznych wymagań.</p>
<p>Artykuł <a href="https://inero-software.com/pl/konfiguracja-polityki-hasel-w-keycloak/">Konfiguracja polityki haseł 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="7653" class="elementor elementor-7653" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-949c242 e-flex e-con-boxed e-con e-parent" data-id="949c242" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-a9078db elementor-widget elementor-widget-html" data-id="a9078db" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 
		</div>
				</div>
				<div class="elementor-element elementor-element-cc34f5b elementor-widget elementor-widget-text-editor" data-id="cc34f5b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>Skuteczne zarządzanie hasłami jest istotnym elementem zabezpieczania kont użytkowników, a Keycloak dostarcza narzędzia do egzekwowania silnych zasad uwierzytelniania. Dzięki konfiguracji reguł haseł administratorzy mogą zadbać o zgodność poświadczeń ze standardami bezpieczeństwa, minimalizując ryzyko nieautoryzowanego dostępu. Platforma oferuje elastyczne opcje, umożliwiające definiowanie wymagań, dotyczących długości i złożoności haseł, ich ważności oraz zapobiegania ponownemu użyciu.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-0df981b elementor-widget elementor-widget-text-editor" data-id="0df981b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tym artykule najpierw przyjrzymy się wbudowanym mechanizmom zarządzania polityką haseł w Keycloak. Następnie omówimy możliwości ich dostosowania do specyficznych wymagań.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ad5f7b2 elementor-widget elementor-widget-image" data-id="ad5f7b2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img fetchpriority="high" decoding="async" width="775" height="411" src="https://inero-software.com/wp-content/uploads/2025/03/115856.png" class="attachment-large size-large wp-image-7638" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/115856.png 775w, https://inero-software.com/wp-content/uploads/2025/03/115856-300x159.png 300w, https://inero-software.com/wp-content/uploads/2025/03/115856-768x407.png 768w, https://inero-software.com/wp-content/uploads/2025/03/115856-566x300.png 566w" sizes="(max-width: 775px) 100vw, 775px" data-attachment-id="7638" data-permalink="https://inero-software.com/configuring-password-policies-in-keycloak/attachment/115856/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/115856.png" data-orig-size="775,411" 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="115856" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/115856-300x159.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/115856.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-b583771 elementor-widget elementor-widget-heading" data-id="b583771" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Wbudowane polityki </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-b2a2079 elementor-widget elementor-widget-text-editor" data-id="b2a2079" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Wbudowane polityki haseł w Keycloak umożliwiają administratorom egzekwowanie zasad bezpieczeństwa w celu wzmocnienia uwierzytelniania użytkowników. Poniżej znajduje się krótki opis każdej z nich:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1dcf64f elementor-widget elementor-widget-text-editor" data-id="1dcf64f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<ol><li><strong>Wygasanie hasła (Expire Password)</strong> – Wymusza zmianę hasła po określonym czasie.</li><li><strong>Iteracje hashowania (Hashing Iterations)</strong> – Określa liczbę iteracji podczas hashowania hasła w celu zwiększenia bezpieczeństwa.</li><li><strong>Brak ponownego użycia (Not Recently Used)</strong> – Zapobiega ponownemu użyciu ostatnich haseł przez użytkownika.</li><li><strong>Czarna lista haseł (Password Blacklist)</strong> – Blokuje określone hasła, zwykle słabe lub powszechnie używane.</li><li><strong>Wyrażenie regularne (Regular Expression)</strong> – Pozwala wymusić niestandardowy wzorzec regex dla walidacji hasła.</li><li><strong>Minimalna długość (Minimum Length)</strong> – Ustawia minimalną liczbę znaków wymaganą w haśle.</li><li><strong>Brak nazwy użytkownika jako hasła (Not Username)</strong> – Uniemożliwia ustawienie nazwy użytkownika jako hasła.</li><li><strong>Brak adresu e-mail jako hasła (Not Email)</strong> – Zapobiega używaniu adresu e-mail jako hasła.</li><li><strong>Brak ponownego użycia w określonym czasie (Not Recently Used in Days)</strong> – Blokuje ponowne użycie hasła przez określoną liczbę dni.</li><li><strong>Nie zawiera nazwy użytkownika (Not Contains Username)</strong> – Wymusza, aby hasło nie zawierało nazwy użytkownika.</li><li><strong>Znaki specjalne (Special Characters)</strong> – Wymaga co najmniej jednego znaku specjalnego w haśle.</li><li><strong>Wielkie litery (Uppercase Characters)</strong> – Wymusza obecność co najmniej jednej wielkiej litery w haśle.</li><li><strong>Małe litery (Lowercase Characters)</strong> – Wymaga co najmniej jednej małej litery w haśle.</li><li><strong>Cyfry (Digits)</strong> – Wymaga co najmniej jednej cyfry w haśle.</li><li><strong>Maksymalny czas ważności uwierzytelnienia (Maximum Authentication Age)</strong> – Określa maksymalny czas ważności sesji przed wymuszeniem ponownego logowania.</li><li><strong>Algorytm hashowania (Hashing Algorithm)</strong> – Określa algorytm używany do szyfrowania haseł.</li><li><strong>Maksymalna długość (Maximum Length)</strong> – Definiuje maksymalną dopuszczalną długość hasła.</li></ol>						</div>
				</div>
				<div class="elementor-element elementor-element-95da107 elementor-widget elementor-widget-heading" data-id="95da107" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Implementacja niestandardowej polityki haseł przy użyciu SPI</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-86f9385 elementor-widget elementor-widget-text-editor" data-id="86f9385" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Aby zaimplementować niestandardową politykę haseł w Keycloak, należy użyć interfejsu dostawcy usług (SPI – Service Provider Interface).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-efcfbc7 elementor-widget elementor-widget-text-editor" data-id="efcfbc7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tym przypadku definiujemy niestandardowego dostawcę polityki haseł, implementując interfejs <strong>PasswordPolicyProviderFactory</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a47d185 elementor-widget elementor-widget-code-highlight" data-id="a47d185" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>public class PasswordCustomPolicyProviderFactory implements PasswordPolicyProviderFactory {

	public static final Integer DEFAULT_VALUE = 1;
	public static final String MIN_PASSWORD_LIFETIME_ID = "minimumPasswordLifetime";

	@Override
	public String getId() {
    	return MIN_PASSWORD_LIFETIME_ID;
	}

	@Override
	public PasswordPolicyProvider create(KeycloakSession session) {
    	return new PasswordCustomPolicyProvider(session);
	}
[...]
}

</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-75140a5 elementor-widget elementor-widget-text-editor" data-id="75140a5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong data-start="0" data-end="11" data-is-only-node="">Factory</strong> instancjonuje i zwraca nową instancję <strong data-start="50" data-end="82">PasswordCustomPolicyProvider</strong>, która zawiera logikę walidacji wymuszającą minimalny czas życia hasła. Stała <strong data-start="161" data-end="189">MIN_PASSWORD_LIFETIME_ID</strong> pełni rolę unikalnego identyfikatora tej niestandardowej polityki, a stała <strong data-start="265" data-end="282">DEFAULT_VALUE</strong> określa domyślny minimalny czas życia hasła (w dniach), jeśli nie zostanie skonfigurowana inna wartość w <strong data-start="388" data-end="405">Admin Console</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-3c1cd5b elementor-widget elementor-widget-code-highlight" data-id="3c1cd5b" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>public class PasswordCustomPolicyProvider implements PasswordPolicyProvider {
np.
   private static final String POLICY_VIOLATION_MESSAGE = "passwordLifetimeViolation";


   private final KeycloakSession keycloakSession;

   public PasswordCustomPolicyProvider(KeycloakSession keycloakSession) {
   	this.keycloakSession = keycloakSession;
   }


   @Override
   public PolicyError validate(RealmModel realm, UserModel user, String password) {
   	PasswordCredentialProvider credentialProvider = new PasswordCredentialProvider(keycloakSession);
   	PasswordCredentialModel credentialModel = credentialProvider.getPassword(realm, user);

   	if (credentialModel == null) {
       	return null;
   	}

   	long passwordCreationTime = credentialModel.getCreatedDate();
   	long currentTime = Time.currentTimeMillis();
   	long elapsedTime = currentTime - passwordCreationTime;

   	PasswordPolicy passwordPolicy = realm.getPasswordPolicy();
   	int minPasswordLifetimeDays = passwordPolicy.getPolicyConfig(PasswordCustomPolicyProviderFactory.MIN_PASSWORD_LIFETIME_ID);
   	long minPasswordLifetimeMillis = TimeUnit.DAYS.toMillis(minPasswordLifetimeDays);
   	return elapsedTime >= minPasswordLifetimeMillis ? null : new PolicyError(POLICY_VIOLATION_MESSAGE, minPasswordLifetimeDays);
   }
[...]
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-7cd9848 elementor-widget elementor-widget-text-editor" data-id="7cd9848" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>PasswordCredentialProvider</strong> może uzyskać dostęp do zapisanego znacznika czasu utworzenia hasła za pośrednictwem instancji <strong>PasswordCredentialModel</strong>. Następnie oblicza <strong>elapsedTime</strong> jako różnicę między tym znacznikiem a bieżącym czasem systemowym, co określa, jak długo hasło jest już używane.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c8ec00f elementor-widget elementor-widget-text-editor" data-id="c8ec00f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Następnie obiekt <strong>PasswordPolicy</strong> pobiera politykę haseł dla danego realm&#8217;u, wyodrębnia minimalny wymagany czas życia hasła w dniach (<strong>minPasswordLifetimeDays</strong>) i przelicza go na milisekundy (<strong>minPasswordLifetimeMillis</strong>). Polityka ta zapewnia, że hasło było używane przez co najmniej wymagany okres. Jeśli warunek ten nie zostanie spełniony, zwracany jest obiekt <strong>PolicyError</strong>. Klucz wiadomości o błędzie jest zapisany w stałej <strong>POLICY_VIOLATION_MESSAGE</strong>, a jego treść może być dostosowana w naszym motywie. Pozwala to na zdefiniowanie przyjaznego komunikatu, który informuje użytkownika, dlaczego zmiana hasła jest niedostępna i ile czasu pozostało do możliwości ustawienia nowego.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5c8b84b elementor-widget elementor-widget-image" data-id="5c8b84b" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="711" height="443" src="https://inero-software.com/wp-content/uploads/2025/03/122254.png" class="attachment-large size-large wp-image-7639" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/122254.png 711w, https://inero-software.com/wp-content/uploads/2025/03/122254-300x187.png 300w, https://inero-software.com/wp-content/uploads/2025/03/122254-481x300.png 481w" sizes="(max-width: 711px) 100vw, 711px" data-attachment-id="7639" data-permalink="https://inero-software.com/configuring-password-policies-in-keycloak/attachment/122254/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/122254.png" data-orig-size="711,443" 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="122254" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/122254-300x187.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/122254.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-a18d447 elementor-widget elementor-widget-text-editor" data-id="a18d447" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W ten sposób możemy definiować niestandardowe polityki haseł w Keycloak, gdy domyślny zestaw polityk okazuje się niewystarczający dla konkretnych wymagań. Taka elastyczność umożliwia bardziej szczegółową kontrolę nad uwierzytelnianiem użytkowników i zarządzaniem hasłami, gdy zachodzi taka potrzeba.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ed723ca elementor-widget elementor-widget-heading" data-id="ed723ca" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Dostosowanie interfejsu w celu poprawy UX</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-0d876c8 elementor-widget elementor-widget-text-editor" data-id="0d876c8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Domyślnie Keycloak wyświetla niespełnione polityki haseł osobno na stronie logowania. Może to być problematyczne dla wielu użytkowników, zwłaszcza gdy naruszonych jest kilka zasad jednocześnie. Prowadzi to do przeładowanego interfejsu i utrudnia użytkownikom zrozumienie wszystkich wymagań dotyczących hasła. Aby temu zaradzić, można dostosować ekran logowania tak, aby prezentował zbiorczą listę wszystkich niespełnionych polityk haseł, co zapewni bardziej przejrzyste i przyjazne dla użytkownika doświadczenie.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-129921c elementor-widget elementor-widget-code-highlight" data-id="129921c" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>public class CustomFreeMarkerLoginFormsProvider extends FreeMarkerLoginFormsProvider {
/**
* Mapping between password policy provider IDs and custom messages
* Note: contains only standard policies that must be displayed in the UI
*/
private final Map<String, String> policyPropertyMessages = Map.of(
LengthPasswordPolicyProviderFactory.ID, MINIMUM_LENGTH_MESSAGE,
MaximumLengthPasswordPolicyProviderFactory.ID, MAXIMUM_LENGTH_MESSAGE,
DigitsPasswordPolicyProviderFactory.ID, MINIMUM_DIGIT_MESSAGE,
SpecialCharsPasswordPolicyProviderFactory.ID, MINIMUM_SPECIAL_CHAR_MESSAGE,
UpperCasePasswordPolicyProviderFactory.ID, MINIMUM_UPPERCASE_MESSAGE,
LowerCasePasswordPolicyProviderFactory.ID, MINIMUM_LOWERCASE_MESSAGE,
NotUsernamePasswordPolicyProviderFactory.ID, NOT_USERNAME_MESSAGE,
NotContainsUsernamePasswordPolicyProviderFactory.ID, NOT_CONTAINS_USERNAME_MESSAGE,
NotEmailPasswordPolicyProviderFactory.ID, NOT_EMAIL_MESSAGE
);

[...]

@Override
protected void createCommonAttributes(Theme theme, Locale locale, Properties messagesBundle,
UriBuilder baseUriBuilder, LoginFormsPages page) {
super.createCommonAttributes(theme, locale, messagesBundle, baseUriBuilder, page);
if (realm != null && realm.getPasswordPolicy() != null) {
attributes.put("passwordPolicies", getPasswordPolicyMessages(realm.getPasswordPolicy(), messagesBundle));
}}

[...]

private Map<String, String> getPasswordPolicyMessages(PasswordPolicy passwordPolicy, Properties messagesBundle) {
Map<String, String> policyMessages = new HashMap<>();
PasswordPolicy.Builder builder = passwordPolicy.toBuilder();
for (String policyName : passwordPolicy.getPolicies()) {
var value = builder.get(policyName);
String message = extractPolicyMessage(policyName, value, messagesBundle);
if (message != null) {
policyMessages.put(policyName, message);
}
}
return policyMessages;
}

[...]

/**
* Extracts a message for a given password policy from the messages bundle
* Note: Policy message is constructed by replacing the {0} placeholder with the policy value
*/
private String extractPolicyMessage(String policy, String value, Properties messagesBundle) {
String property = policyPropertyMessages.get(policy);
if (property == null) {
return null;
}
String policyMessage = messagesBundle.getProperty(property);
return policyMessage != null ? policyMessage.replace("{0}", value) : null;
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e47c0c6 elementor-widget elementor-widget-text-editor" data-id="e47c0c6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Funkcja <strong>getPasswordPolicyMessages()</strong> już zbiera polityki haseł z obiektu <strong>PasswordPolicy</strong> i mapuje je na odpowiednie komunikaty z pliku wiadomości (<strong>message bundle</strong>). Można ją rozszerzyć tak, aby wyświetlała wszystkie niespełnione zasady w jednej zbiorczej wiadomości.</p><p>Polityki haseł, takie jak minimalna długość, wymagane cyfry, znaki specjalne itp., są mapowane na komunikaty za pomocą metody <strong>extractPolicyMessage()</strong>. Nasza implementacja serwisu przechodzi przez każdą z zasad i sprawdza, czy jest spełniona. Jeśli nie – wyświetlany jest odpowiadający jej komunikat.</p><p>Na stronie <strong>update-password.ftl</strong> możesz zaprezentować te niespełnione zasady jako listę przy użyciu szablonów <strong>FreeMarker</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e70d98c elementor-widget elementor-widget-code-highlight" data-id="e70d98c" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>
    	<#if passwordPolicies?has_content>
        	<div class="${properties.kcAlertClass}">
            	<div class="${properties.kcAlertIconWrapperClass}">
                	<span class="${properties.kcAlertIconClass}"></span>
            	</div>
            	<span class="${properties.kcAlertTitleClass}">
            	${msg("passwordInstruction")} <br>
            	<#list passwordPolicies?keys as key>
                	<span class="${properties.kcAlertTitleClass}">&#x2022; ${passwordPolicies[key]}</span><br/>
            	</#list>
            	</span>
        	</div>
    	</#if>

</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-358fd5c elementor-widget elementor-widget-image" data-id="358fd5c" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="648" height="510" src="https://inero-software.com/wp-content/uploads/2025/03/123206.png" class="attachment-large size-large wp-image-7640" alt="" srcset="https://inero-software.com/wp-content/uploads/2025/03/123206.png 648w, https://inero-software.com/wp-content/uploads/2025/03/123206-300x236.png 300w, https://inero-software.com/wp-content/uploads/2025/03/123206-381x300.png 381w, https://inero-software.com/wp-content/uploads/2025/03/123206-380x300.png 380w" sizes="(max-width: 648px) 100vw, 648px" data-attachment-id="7640" data-permalink="https://inero-software.com/configuring-password-policies-in-keycloak/attachment/123206/" data-orig-file="https://inero-software.com/wp-content/uploads/2025/03/123206.png" data-orig-size="648,510" 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="123206" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2025/03/123206-300x236.png" data-large-file="https://inero-software.com/wp-content/uploads/2025/03/123206.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-6d7a6c0 elementor-widget elementor-widget-heading" data-id="6d7a6c0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Praktyczne przykłady polityk haseł</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-776740f elementor-widget elementor-widget-text-editor" data-id="776740f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Zobaczmy, jak wyglądają polityki haseł w dużych firmach.</p><p> </p><p>Apple wymaga, aby hasła miały co najmniej osiem znaków i zawierały zarówno litery, jak i cyfry. Dodatkowo, hasła nie mogą zawierać trzech lub więcej identycznych znaków pod rząd i nie mogą być powszechnie używanymi hasłami.</p><p> </p><p>Facebook narzuca minimalną długość hasła wynoszącą ponad sześć znaków, choć zaleca stosowanie dłuższych haseł. Choć Meta nie wymaga użycia znaków specjalnych ani cyfr, zachęca do tworzenia złożonych haseł.</p><p> </p><p>Microsoft wymaga, aby hasła miały co najmniej 8 znaków i zawierały co najmniej dwa z następujących typów znaków: wielkie litery, małe litery, cyfry lub symbole. Dodatkowo, system może blokować możliwość ustawienia hasła zbyt podobnego do poprzedniego.</p><p> </p><p>Chociaż firmy te korzystają z różnych narzędzi uwierzytelniania, warto zwrócić uwagę na standardy bezpieczeństwa wdrażane w dużych systemach produkcyjnych.</p><p> </p><p>I mimo że te polityki haseł nie są skrajnie restrykcyjne, użytkownicy powinni unikać wykorzystywania w hasłach wrażliwych danych osobowych, takich jak imiona, daty urodzenia czy numery telefonów. Należy również unikać ponownego używania haseł w różnych usługach, ponieważ może to prowadzić do naruszeń bezpieczeństwa w przypadku przejęcia jednego z kont. Włączenie uwierzytelniania dwuskładnikowego (2FA) i okresowy przegląd bezpieczeństwa haseł to kolejne kroki, które użytkownicy mogą podjąć w celu zwiększenia ochrony.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d64b6d9 elementor-widget elementor-widget-heading" data-id="d64b6d9" 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-911c3a6 elementor-widget elementor-widget-text-editor" data-id="911c3a6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Jak widać, Keycloak oferuje zestaw domyślnych polityk haseł, które obejmują standardowe zasady bezpieczeństwa, takie jak minimalna długość, wymagania dotyczące złożoności czy historia użycia haseł. Wbudowane polityki są wystarczające w wielu przypadkach, jednak w razie potrzeby istnieje możliwość ich dostosowania do konkretnych wymagań organizacyjnych. Keycloak pozwala również na tworzenie własnych polityk haseł, co daje większą kontrolę nad bezpieczeństwem.</p><p> </p><p>Oprócz modyfikacji samych zasad, Keycloak umożliwia także dostosowanie interfejsu użytkownika. Jest to szczególnie przydatne w sytuacjach, gdy domyślny sposób prezentowania naruszeń polityk haseł — np. wyświetlanie niespełnionych wymagań osobno — nie spełnia naszych oczekiwań. W takich przypadkach możemy zmienić sposób prezentacji błędów lub wzbogacić komunikaty o dodatkowe informacje, aby były bardziej czytelne i zrozumiałe dla użytkownika.</p><p> </p><p>Dzięki tym możliwościom Keycloak pokazuje wysoki poziom elastyczności, umożliwiając pełną kontrolę zarówno nad politykami bezpieczeństwa, jak i nad wyglądem interfejsu. Czyni go to uniwersalnym rozwiązaniem do zarządzania tożsamością i dostępem. Możliwość definiowania własnych reguł i dostosowywania komponentów sprawia, że Keycloak to skalowalne narzędzie, które z łatwością można dopasować do indywidualnych potrzeb organizacji.</p>						</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/konfiguracja-polityki-hasel-w-keycloak/">Konfiguracja polityki haseł 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">7653</post-id>	</item>
		<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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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>Praktyczne wprowadzenie do Keycloak SSO: Od konfiguracji do integracji</title>
		<link>https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Tue, 17 Dec 2024 09:48:48 +0000</pubDate>
				<category><![CDATA[Firma]]></category>
		<category><![CDATA[Keycloak]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=6522</guid>

					<description><![CDATA[<p>SSO to protokół umożliwiający użytkownikom uwierzytelnianie i uzyskiwanie dostępu do wielu aplikacji za pomocą jednego zestawu danych logowania.</p>
<p>Artykuł <a href="https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/">Praktyczne wprowadzenie do Keycloak SSO: Od konfiguracji do integracji</a> 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="6522" class="elementor elementor-6522" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-1493b19 e-flex e-con-boxed e-con e-parent" data-id="1493b19" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-68a6464 e-con-full e-flex e-con e-child" data-id="68a6464" data-element_type="container">
				</div>
		<div class="elementor-element elementor-element-c7adbf7 e-con-full e-flex e-con e-child" data-id="c7adbf7" data-element_type="container">
				<div class="elementor-element elementor-element-3a1b9b4 elementor-widget elementor-widget-html" data-id="3a1b9b4" data-element_type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
			 		</div>
				</div>
				<div class="elementor-element elementor-element-e6791c3 elementor-widget elementor-widget-text-editor" data-id="e6791c3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4>Jedną z największych zalet, jakie Keycloak oferuje jest Single Sign-On (SSO). Funkcja ta znacząco usprawnia zarządzanie użytkownikami, upraszcza procesy uwierzytelniania w aplikacjach firmowych i stanowi skuteczne rozwiązanie w zakresie wyzwań związanych z bezpieczeństwem. Dziś przyjrzymy się, jak działa oraz jak skonfigurować przykładową integrację.</h4>						</div>
				</div>
				<div class="elementor-element elementor-element-fe586fe elementor-widget elementor-widget-heading" data-id="fe586fe" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">SSO (Single Sign-On)
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d084fd9 elementor-widget elementor-widget-text-editor" data-id="d084fd9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>SSO to protokół umożliwiający użytkownikom uwierzytelnianie i uzyskiwanie dostępu do wielu aplikacji za pomocą jednego zestawu danych logowania. Takie podejście jest niezwykle wygodne, ponieważ eliminuje potrzebę zapamiętywania wielu haseł lub wielokrotnego logowania się. Co więcej, SSO zwiększa bezpieczeństwo, zmniejszając ryzyko związane ze słabymi, powtórnie używanymi lub zgubionymi hasłami.</p><p>Centrum SSO stanowi dostawca tożsamości (IdP), który działa jak centralny serwer uwierzytelniający. Gdy użytkownicy logują się do swojej pierwszej aplikacji, są przekierowywani do IdP, gdzie podają swoje dane uwierzytelniające. Po pomyślnym uwierzytelnieniu IdP inicjuje sesję SSO i generuje zaszyfrowany <strong>token</strong> dostępu, który aplikacja wykorzystuje do potwierdzenia tożsamości użytkownika.</p><p>Po aktywacji sesji SSO użytkownik może uzyskać dostęp do innych zaufanych aplikacji bez konieczności ponownego logowania. Kiedy druga aplikacja wymaga uwierzytelnienia, komunikuje się z IdP, który weryfikuje aktywną sesję użytkownika i wydaje kolejny token dostępu, umożliwiając płynny dostęp bez ponownego wprowadzania danych logowania.</p><p>Nowoczesne rozwiązania IAM ułatwiają implementację SSO w różnych aplikacjach, często wykorzystując otwarte standardy, takie jak OAuth 2.0 i OpenID Connect (OIDC). Standardy te umożliwiają uwierzytelnianie nie tylko w aplikacjach wewnętrznych, ale także w tych, które opierają się na zewnętrznych dostawcach tożsamości. Dodatkowo SSO obsługuje logowanie za pomocą mediów społecznościowych, co pozwala użytkownikom na uwierzytelnienie przy użyciu istniejących danych logowania z platform takich jak Google, Facebook czy Twitter.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5109a8f elementor-widget elementor-widget-heading" data-id="5109a8f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Typy SSO
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-8c2be01 elementor-widget elementor-widget-text-editor" data-id="8c2be01" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Podczas wdrażania i zarządzania Single Sign-On (SSO) kluczowe jest zrozumienie różnych protokołów i standardów, które umożliwiają jego działanie. Do najczęściej stosowanych należą Security Assertion Markup Language (SAML) oraz OpenID Connect (OIDC). Keycloak obsługuje oba te protokoły, co czyni je głównym punktem naszej dyskusji. Warto jednak zauważyć, że inne protokoły, takie jak Kerberos, również odgrywają rolę w niektórych scenariuszach SSO.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1110979 elementor-widget elementor-widget-heading" data-id="1110979" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">Security Access Markup Language (SAML)
</h4>		</div>
				</div>
				<div class="elementor-element elementor-element-033ee93 elementor-widget elementor-widget-text-editor" data-id="033ee93" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>SAML to standard oparty na XML, zaprojektowany do kodowania i wymiany informacji o tożsamości pomiędzy aplikacjami. Stał się on fundamentem dla SSO, umożliwiając bezpieczne potwierdzanie żądań uwierzytelniania w aplikacjach internetowych. SAML 2.0, najczęściej stosowana wersja, jest zoptymalizowana specjalnie pod kątem środowisk przeglądarkowych, pozwalając na bezpieczne przekazywanie informacji o użytkownikach za pośrednictwem przeglądarek internetowych. Ze względu na swoją rozwlekłość i mniejszą efektywność przetwarzania danych w porównaniu do nowoczesnych standardów, SAML najlepiej sprawdza się w starszych oraz korporacyjnych aplikacjach internetowych, zwłaszcza tych działających wewnątrz organizacji.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-df47e79 elementor-widget elementor-widget-heading" data-id="df47e79" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">OpenID Connect (OIDC)
</h4>		</div>
				</div>
				<div class="elementor-element elementor-element-43f4373 elementor-widget elementor-widget-text-editor" data-id="43f4373" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>OIDC to rozszerzenie protokołu OAuth 2.0, które dodaje informacje o użytkownikach i umożliwia SSO. Wykorzystuje JSON oraz RESTful API do wymiany danych, co sprawia, że jest szybkie i łatwe do integracji, zwłaszcza w środowiskach mobilnych i opartych na chmurze. OIDC jest szczególnie przydatne w scenariuszach związanych z logowaniem przez media społecznościowe (np. Google, Facebook) oraz zewnętrznymi interfejsami API. Jest to najlepszy wybór w sytuacjach, gdy aplikacje wymagają elastycznego, skalowalnego uwierzytelniania opartego na tokenach i zapewniającego wysoki poziom bezpieczeństwa.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-dbb4648 elementor-widget elementor-widget-heading" data-id="dbb4648" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Zalety i wady wdrożenia SSO</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-0582d73 elementor-widget elementor-widget-text-editor" data-id="0582d73" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Kluczowe korzyści Single Sign-On (SSO) to:</p><ul><li><strong>SSO ogranicza potrzebę zapamiętywania wielu nazw użytkowników i haseł</strong>, konsolidując uwierzytelnianie do jednego zestawu danych logowania.</li><li><strong>Redukuje liczbę resetów haseł i problemów z logowaniem</strong>, co zmniejsza obciążenie działu IT i prowadzi do oszczędności kosztów.</li><li><strong>Eliminuje przerwy spowodowane wielokrotnym logowaniem i zarządzaniem hasłami</strong>, pozwalając użytkownikom szybko uzyskać dostęp do potrzebnych zasobów i skupić się na zadaniach. Usprawnia proces logowania oraz umożliwia wylogowanie jednym kliknięciem z wielu aplikacji.</li><li><strong>Centralizacja danych użytkowników</strong> ułatwia administratorom zarządzanie i dostosowywanie uprawnień dostępu w całej sieci, zapewniając lepszą kontrolę.</li><li><strong>Konsolidacja danych logowania zmniejsza ryzyko związane ze słabym zarządzaniem hasłami</strong>. Administratorzy mogą łatwiej wyłączać konta w razie potrzeby, co podnosi ogólny poziom bezpieczeństwa.</li></ul><p>Podsumowując, <strong>SSO poprawia doświadczenie użytkowników, zwiększa produktywność, wzmacnia bezpieczeństwo i upraszcza zadania administracyjne</strong>, centralizując proces uwierzytelniania i ułatwiając zarządzanie dostępem.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-759f1f5 elementor-widget elementor-widget-text-editor" data-id="759f1f5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><strong>Potencjalne wady SSO</strong></p><ul><li><p><strong>Pojedynczy punkt awarii (SPOF)</strong><br />Jeśli dostawca SSO doświadczy awarii lub zostanie naruszony, użytkownicy mogą utracić dostęp do wielu aplikacji jednocześnie.</p></li><li><p><strong>Złożoność wdrożenia</strong><br />Konfiguracja i utrzymanie systemu SSO może być technicznie wymagające, szczególnie w środowiskach zróżnicowanych pod względem aplikacji i protokołów. Nie wszystkie aplikacje natywnie obsługują SSO, co może wymagać niestandardowych integracji.</p></li><li><p><strong>Problemy ze skalowalnością</strong><br />W środowiskach o dużym ruchu system SSO musi obsługiwać znaczne obciążenia, co może wymagać dodatkowych zasobów oraz starannego planowania przyszłych integracji.</p></li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-e1a3472 elementor-widget elementor-widget-heading" data-id="e1a3472" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">SSO z Keycloak i Spring
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d4bf9a8 elementor-widget elementor-widget-text-editor" data-id="d4bf9a8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Teraz omówimy, jak skonfigurować prosty mechanizm SSO przy użyciu Spring Security, biblioteki keycloak-angular oraz Keycloak jako dostawcy tożsamości. Wybór Keycloak jest podyktowany kilkoma czynnikami. Wykorzystuje on dobrze ugruntowany standard OpenID Connect, zapewniając szeroką kompatybilność. Wyróżnia się również dużą liczbą gotowych przykładów integracji zarówno dla aplikacji front-end, jak i back-end. Oferuje także znaczną elastyczność dzięki rozszerzeniom opartym na Javie, umożliwiając łatwą personalizację.</p><p>Aby uruchomić demo SSO, przejdziemy przez przygotowanie serwera autoryzacji, serwera zasobów oraz dwóch różnych aplikacji klienckich. Gdy użytkownik spróbuje uzyskać dostęp do zasobu jednej z aplikacji klienckich, powinien zostać przekierowany do serwera autoryzacji w celu uzyskania tokena. Keycloak zarządza procesem logowania, a po zalogowaniu użytkownika do pierwszej aplikacji klienckiej, jeśli uzyska on dostęp do drugiej aplikacji klienckiej z tej samej przeglądarki, nie będzie musiał logować się ponownie, ponieważ sesja SSO pozostaje aktywna. W tym przykładzie użyjemy klienta OIDC obsługującego OAuth2 oraz Authorization Code Flow do zarządzania procesem uwierzytelniania między punktami końcowymi.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f0eb4d8 elementor-widget elementor-widget-image" data-id="f0eb4d8" 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/2024/12/KEYCLOCK7-1030x579.png" class="attachment-large size-large wp-image-6505" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-1030x579.png 1030w, https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-300x169.png 300w, https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-768x432.png 768w, https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-1536x864.png 1536w, https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-533x300.png 533w, https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7.png 1920w" sizes="(max-width: 1030px) 100vw, 1030px" data-attachment-id="6505" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/keyclock7/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7.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="KEYCLOCK7" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-300x169.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/KEYCLOCK7-1030x579.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-a03fa44 elementor-widget elementor-widget-heading" data-id="a03fa44" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Serwer autoryzacji</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-46bf13a elementor-widget elementor-widget-text-editor" data-id="46bf13a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Do realizacji zadań dostawcy tożsamości (Identity Provider) lub serwera autoryzacji możemy wykorzystać obraz Dockera z najnowszą wersją Keycloak. Dzięki wdrożeniu za pomocą pliku <strong>docker-compose</strong> możemy szybko przygotować i skonfigurować środowisko, w tym bazę danych, bez potrzeby ręcznej instalacji. Prosta konfiguracja <strong>docker-compose</strong> będzie zawierać dwie usługi: <strong>Keycloak</strong> oraz bazę danych <strong>PostgreSQL</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b80ac6b elementor-widget elementor-widget-text-editor" data-id="b80ac6b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">x-keycloak: &amp;keycloak</span></p><p><span style="font-weight: 400;">  build: keycloak</span></p><p><span style="font-weight: 400;">  ports:</span></p><p><span style="font-weight: 400;">&#8211; &#8222;8080:8080&#8221;</span></p><p><span style="font-weight: 400;">  depends_on:</span></p><p><span style="font-weight: 400;">&#8211; db-postgres-keycloak</span></p><p><span style="font-weight: 400;"> </span></p><p><span style="font-weight: 400;">x-common-variables: &amp;common-variables</span></p><p><span style="font-weight: 400;">  KC_BOOTSTRAP_ADMIN_USERNAME: admin</span></p><p><span style="font-weight: 400;">  KC_BOOTSTRAP_ADMIN_PASSWORD: admin</span></p><p><span style="font-weight: 400;">  KC_HOSTNAME_STRICT: &#8222;false&#8221;</span></p><p><span style="font-weight: 400;">  KC_HTTP_RELATIVE_PATH: /auth</span></p><p><span style="font-weight: 400;">  KC_HTTP_ENABLED: 'true&#8217;</span></p><p><span style="font-weight: 400;">  KC_LOG_LEVEL: &#8222;INFO,io.quarkus.http.access-log:DEBUG&#8221;</span></p><p><span style="font-weight: 400;">  KC_DB: postgres</span></p><p><span style="font-weight: 400;">  KC_DB_URL_HOST: db-postgres-keycloak</span></p><p><span style="font-weight: 400;">  KC_DB_USERNAME: keycloak</span></p><p><span style="font-weight: 400;">  KC_DB_PASSWORD: password</span></p><p><span style="font-weight: 400;">  KC_DB_SCHEMA: public</span></p><p><span style="font-weight: 400;">  QUARKUS_HTTP_ACCESS_LOG_ENABLED: 'true&#8217;</span></p><p><span style="font-weight: 400;">services:</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">   keycloak:</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">          &lt;&lt;: *keycloak</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">         environment:</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">        </span> <span style="font-weight: 400;">&lt;&lt;: *common-variables</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">       profiles: [&#8222;example&#8221;]</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">      command: start &#8211;optimized</span></p><p><span style="font-weight: 400;">db-postgres-keycloak:</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">      profiles: [&#8222;example&#8221;]</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">      image: postgres:15</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">      environment:</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">     </span> <span style="font-weight: 400;">POSTGRES_USER: keycloak</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">      </span><span style="font-weight: 400;">POSTGRES_PASSWORD: password</span><span style="font-weight: 400;"><br /></span><span style="font-weight: 400;">     </span> <span style="font-weight: 400;">POSTGRES_DB: keycloak</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-2db7c3a elementor-widget elementor-widget-text-editor" data-id="2db7c3a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Po uruchomieniu kontenerów możemy zalogować się do konsoli administracyjnej (dostępnej pod adresem <strong><a href="http://localhost:8080" target="_new" rel="noopener">http://localhost:8080</a></strong>). Zanim jednak przejdziemy do konfiguracji klientów w ramach realm, warto poświęcić chwilę na zapoznanie się z ustawieniami w sekcji <strong>Realm Settings -&gt; Sessions</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-76e1efc elementor-widget elementor-widget-heading" data-id="76e1efc" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h4 class="elementor-heading-title elementor-size-default">SSO konfiguracja sesji</h4>		</div>
				</div>
				<div class="elementor-element elementor-element-143c327 elementor-widget elementor-widget-image" data-id="143c327" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="605" height="351" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz1.png" class="attachment-large size-large wp-image-6507" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz1.png 605w, https://inero-software.com/wp-content/uploads/2024/12/Obraz1-300x174.png 300w, https://inero-software.com/wp-content/uploads/2024/12/Obraz1-517x300.png 517w" sizes="(max-width: 605px) 100vw, 605px" data-attachment-id="6507" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz1-3/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz1.png" data-orig-size="605,351" 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="Obraz1" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz1-300x174.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz1.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-21c6e4e elementor-widget elementor-widget-text-editor" data-id="21c6e4e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Podczas konfigurowania nowego realm możemy dostosować ustawienia zarządzania sesjami, aby zrównoważyć bezpieczeństwo i wygodę użytkowników. Ustawienia te określają, jak długo użytkownicy pozostają uwierzytelnieni oraz warunki, w których muszą ponownie się zalogować. Poniżej opisujemy najważniejsze z nich:</p><ul><li><p><strong>SSO Session Idle</strong> – to ustawienie kontroluje, jak długo użytkownik może pozostawać nieaktywny, zanim jego sesja wygaśnie. Jeśli użytkownik nie podejmie żadnej aktywności przez określony czas, będzie musiał ponownie się uwierzytelnić przy następnej interakcji z aplikacją. Licznik jest resetowany, gdy klient wysyła żądania odświeżenia tokena.</p></li><li><p><strong>SSO Session Max</strong> – parametr ten definiuje maksymalny czas trwania sesji, niezależnie od aktywności użytkownika. Gdy sesja przekroczy ten czas, użytkownik zostanie wylogowany i poproszony o ponowne zalogowanie się.</p></li><li><p><strong>SSO Session Idle Remember Me</strong> oraz <strong>SSO Session Max Remember Me</strong> – działają podobnie jak parametry SSO Session, ale odnoszą się do sytuacji, gdy użytkownik zaznaczył opcję <em>Remember Me</em> (Zapamiętaj mnie).</p></li><li><p><strong>Client Session Idle</strong> oraz <strong>Client Session Max</strong> – te parametry powinny mieć krótsze wartości czasu niż ogólne ustawienia SSO. Określają one maksymalny okres ważności tokena odświeżania i mogą być nadpisane dla poszczególnych klientów w ich ustawieniach.</p></li></ul><p>Dostosowanie tych ustawień pozwala precyzyjnie zarządzać sesjami użytkowników, zwiększając kontrolę nad bezpieczeństwem aplikacji oraz optymalizując doświadczenie użytkowników.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-67f3943 elementor-widget elementor-widget-heading" data-id="67f3943" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Serwer zasobów</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-1ecb54b elementor-widget elementor-widget-text-editor" data-id="1ecb54b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Jednym z klientów realm będzie <strong>serwer zasobów</strong>, który pełni podwójną rolę – jako klient Keycloak oraz backend dla dwóch różnych aplikacji uczestniczących w opisanym przepływie. Proces integracji aplikacji <strong>Spring Boot</strong> z Keycloak jest bardzo podobny do tego, który opisaliśmy w jednym z wcześniejszych wpisów (https://inero-software.com/pl/zabezpieczanie-punktow-koncowych-java-spring-za-pomoca-keycloak/).</p><p>Dlatego nie będziemy tutaj skupiać się na samej aplikacji Java. Skonfigurowany w ten sposób <strong>serwer zasobów</strong> będzie wystawiał przykładowy endpoint dostępny tylko dla użytkowników uwierzytelnionych w ramach tego realm.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0d382ce elementor-widget elementor-widget-image" data-id="0d382ce" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="605" height="363" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz2.png" class="attachment-large size-large wp-image-6508" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz2.png 605w, https://inero-software.com/wp-content/uploads/2024/12/Obraz2-300x180.png 300w, https://inero-software.com/wp-content/uploads/2024/12/Obraz2-500x300.png 500w" sizes="(max-width: 605px) 100vw, 605px" data-attachment-id="6508" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz2-2/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz2.png" data-orig-size="605,363" 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="Obraz2" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz2-300x180.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz2.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-52acd2b elementor-widget elementor-widget-text-editor" data-id="52acd2b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Serwer zasobów musi zarządzać zasobami w ramach <strong>realm</strong>, dlatego w Keycloak należy zaznaczyć opcję <strong>Authorization</strong>. To ustawienie jest przeznaczone głównie dla serwerów zasobów, które potrzebują dostępu do różnych endpointów, takich jak <strong>Token Endpoint</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-addf1cd elementor-widget elementor-widget-image" data-id="addf1cd" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="605" height="344" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz3.png" class="attachment-large size-large wp-image-6509" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz3.png 605w, https://inero-software.com/wp-content/uploads/2024/12/Obraz3-300x171.png 300w, https://inero-software.com/wp-content/uploads/2024/12/Obraz3-528x300.png 528w" sizes="(max-width: 605px) 100vw, 605px" data-attachment-id="6509" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz3/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz3.png" data-orig-size="605,344" 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="Obraz3" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz3-300x171.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz3.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-fe85f67 elementor-widget elementor-widget-text-editor" data-id="fe85f67" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>W tej konfiguracji klient jest ustawiony jako <strong>confidential</strong> (poufny) z sekretem, który musi być współdzielony zarówno przez serwer Keycloak, jak i samą aplikację. Sekret można wygenerować w <strong>Admin Console</strong>, a następnie umieścić go w pliku <strong>application.properties</strong> aplikacji Spring, aby zapewnić bezpieczną komunikację.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b86fa97 elementor-widget elementor-widget-image" data-id="b86fa97" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="605" height="367" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz4.png" class="attachment-large size-large wp-image-6510" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz4.png 605w, https://inero-software.com/wp-content/uploads/2024/12/Obraz4-300x182.png 300w, https://inero-software.com/wp-content/uploads/2024/12/Obraz4-495x300.png 495w" sizes="(max-width: 605px) 100vw, 605px" data-attachment-id="6510" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz4/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz4.png" data-orig-size="605,367" 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="Obraz4" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz4-300x182.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz4.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-6074115 elementor-widget elementor-widget-text-editor" data-id="6074115" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Pozostałe pola formularza można pozostawić z domyślnymi wartościami.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-faa8b15 elementor-widget elementor-widget-heading" data-id="faa8b15" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Frontend clients
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-78fd29c elementor-widget elementor-widget-text-editor" data-id="78fd29c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Konfiguracja klientów frontendu jest dość podobna do poprzedniej, jednak warto zwrócić uwagę na pewne różnice. W przypadku klientów działających w przeglądarce <strong>nie ustawiamy ich jako confidential</strong>. Opcja <strong>„Authorization”</strong> również <strong>nie jest tutaj wymagana</strong>. Kluczowym aspektem jest właściwa konfiguracja <strong>Redirect URIs</strong> oraz <strong>Web Origins</strong>. Zazwyczaj mogą one być takie same, co zapewnia, że Keycloak prawidłowo rozpozna dozwolone źródła, z których aplikacja frontendowa może wykonywać żądania.</p><p>Jednak nie zaleca się polegania na <strong>wildcardach (*)</strong> w <strong>Redirect URIs</strong>. Najnowsza specyfikacja <strong>OAuth 2.1</strong> wymaga, aby URI były porównywane przy użyciu <strong>dokładnego dopasowania ciągu znaków</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c99d969 elementor-widget elementor-widget-image" data-id="c99d969" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="605" height="292" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz5.png" class="attachment-large size-large wp-image-6511" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz5.png 605w, https://inero-software.com/wp-content/uploads/2024/12/Obraz5-300x145.png 300w" sizes="(max-width: 605px) 100vw, 605px" data-attachment-id="6511" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz5/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz5.png" data-orig-size="605,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="Obraz5" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz5-300x145.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz5.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-16b0b05 elementor-widget elementor-widget-image" data-id="16b0b05" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="594" height="311" src="https://inero-software.com/wp-content/uploads/2024/12/Obraz6.png" class="attachment-large size-large wp-image-6512" alt="" srcset="https://inero-software.com/wp-content/uploads/2024/12/Obraz6.png 594w, https://inero-software.com/wp-content/uploads/2024/12/Obraz6-300x157.png 300w, https://inero-software.com/wp-content/uploads/2024/12/Obraz6-573x300.png 573w" sizes="(max-width: 594px) 100vw, 594px" data-attachment-id="6512" data-permalink="https://inero-software.com/hands-on-keycloak-sso-from-setup-to-integration/obraz6/" data-orig-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz6.png" data-orig-size="594,311" 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="Obraz6" data-image-description="" data-image-caption="" data-medium-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz6-300x157.png" data-large-file="https://inero-software.com/wp-content/uploads/2024/12/Obraz6.png" role="button" />													</div>
				</div>
				<div class="elementor-element elementor-element-74de000 elementor-widget elementor-widget-text-editor" data-id="74de000" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Aby uwierzytelnić użytkownika i wyświetlić stronę logowania Keycloak w naszym projekcie Angular, użyjemy <strong>Injection Token</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ca70eb2 elementor-widget elementor-widget-text-editor" data-id="ca70eb2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">function initializeKeycloak(keycloak: KeycloakService) {</span><br /><span style="font-weight: 400;">return () =&gt;</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">keycloak.init({</span><br /><span style="font-weight: 400;">        </span> <span style="font-weight: 400;">config: {</span><br /><span style="font-weight: 400;">            </span> <span style="font-weight: 400;">url: </span><i><span style="font-weight: 400;">environment</span></i><span style="font-weight: 400;">.keycloakUrl,</span><br /><span style="font-weight: 400;">          </span> <span style="font-weight: 400;">  realm: 'sso-realm',</span><br /><span style="font-weight: 400;">            </span> <span style="font-weight: 400;">clientId: 'sso-app-1',</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><br /><span style="font-weight: 400;">            </span> <span style="font-weight: 400;">checkLoginIframe: false,</span><br /><span style="font-weight: 400;">            </span> <span style="font-weight: 400;">scope: 'sso-resource-server'</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;">});</span><br /><span style="font-weight: 400;">}</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-c885d0e elementor-widget elementor-widget-text-editor" data-id="c885d0e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Powyższa funkcja przyjmuje jako argument <strong>KeycloakService</strong>, czyli obiekt z biblioteki <strong>keycloak-angular</strong>, dzięki czemu możemy go skonfigurować, podając URL serwera, nazwę realm oraz identyfikator klienta aplikacji, który został utworzony w poprzednim kroku. Następnie musimy zarejestrować tę funkcję w pliku <strong>app.module.ts</strong> jako <strong>provider</strong>:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-dda523b elementor-widget elementor-widget-text-editor" data-id="dda523b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">providers: [</span><br /><span style="font-weight: 400;">     {</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">provide: </span><i><span style="font-weight: 400;">APP_INITIALIZER</span></i><span style="font-weight: 400;">,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">useFactory: initializeKeycloak,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">multi: true,</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">deps: [KeycloakService],</span><br /><span style="font-weight: 400;">     },</span><br /><span style="font-weight: 400;">],</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-c73de49 elementor-widget elementor-widget-text-editor" data-id="c73de49" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Kolejnym krokiem będzie utworzenie <strong>Guard</strong>, który zabezpieczy ścieżki w aplikacji. Biblioteka, której używamy, dostarcza już wstępnie skonfigurowaną, abstrakcyjną klasę <strong>KeycloakAuthGuard</strong>, którą rozszerzymy, tworząc własny Guard. Następnie musimy nadpisać metodę <strong>isAccessAllowed</strong>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-79eb23e elementor-widget elementor-widget-text-editor" data-id="79eb23e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<pre><span style="font-weight: 400;">public async isAccessAllowed(</span><br /><span style="font-weight: 400;">      route: ActivatedRouteSnapshot,</span><br /><span style="font-weight: 400;">      state: RouterStateSnapshot</span><br /><br /><span style="font-weight: 400;">) {</span><br /><br /><span style="font-weight: 400;">     // Force the user to log in if currently unauthenticated.</span><br /><span style="font-weight: 400;">    if (!this.authenticated) {</span><br /><span style="font-weight: 400;">    </span><span style="font-weight: 400;">await this.keycloak.login({</span><br /><span style="font-weight: 400;">   </span> <span style="font-weight: 400;">redirectUri: </span><i><span style="font-weight: 400;">window</span></i><span style="font-weight: 400;">.location.origin + '/#/' + state.url</span><br /><span style="font-weight: 400;">    </span> <span style="font-weight: 400;">});<br /></span><br /><span style="font-weight: 400;">     }</span><br /><span style="font-weight: 400;">    // Get the roles required from the route.</span><br /><span style="font-weight: 400;">    const requiredRoles = route.data['roles'];<br /></span><br /><span style="font-weight: 400;">   // Allow the user to proceed if no additional roles are required to access the route.</span><br /><span style="font-weight: 400;">   if (!(requiredRoles instanceof </span><i><span style="font-weight: 400;">Array</span></i><span style="font-weight: 400;">) || requiredRoles.length === 0) {</span><br /><span style="font-weight: 400;">   </span><span style="font-weight: 400;">return true;<br /></span><span style="font-weight: 400;">   }</span><br /><br /><span style="font-weight: 400;">   // Allow the user to proceed if all the required roles are present.</span><br /><span style="font-weight: 400;">  return requiredRoles.every((role) =&gt; this.roles.includes(role));</span><br /><span style="font-weight: 400;">}</span></pre>						</div>
				</div>
				<div class="elementor-element elementor-element-cd7644e elementor-widget elementor-widget-text-editor" data-id="cd7644e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Następnie musimy przypisać <strong>AuthGuard</strong> do określonych ścieżek w module routingu. Po poprawnej konfiguracji wszystkich komponentów biblioteki <strong>keycloak-angular</strong>, użytkownik powinien zostać przekierowany na stronę logowania Keycloak, a po pomyślnej autoryzacji uzyska dostęp do chronionych zasobów.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b82d617 elementor-widget elementor-widget-heading" data-id="b82d617" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Test i podsumowanie </h3>		</div>
				</div>
				<div class="elementor-element elementor-element-f2e9274 elementor-widget elementor-widget-text-editor" data-id="f2e9274" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Aby przetestować funkcjonalność SSO, uruchom serwer zasobów (aplikację Spring) oraz oba klientów działających w przeglądarce. Gdy wszystkie komponenty będą działały, otwórz przeglądarkę i zaloguj się do jednej z aplikacji frontendowych. Następnie otwórz nową kartę lub okno i przejdź do drugiej aplikacji Angular. Po kliknięciu przycisku logowania powinieneś zostać bezpośrednio przekierowany do aplikacji i uzyskać dostęp do chronionego endpointu.</p><p>W ten sposób można zobaczyć, jak wbudowane funkcje Keycloak upraszczają zarządzanie uprawnieniami dostępu. Wykorzystując Keycloak jako <strong>dostawcę tożsamości (Identity Provider)</strong>, możemy skonfigurować system, w którym użytkownicy muszą zalogować się tylko raz, aby uzyskać dostęp do różnych połączonych aplikacji. Centralizując dane logowania użytkowników, zwiększamy zarówno <strong>bezpieczeństwo</strong>, jak i <strong>doświadczenie użytkownika</strong>, a także ograniczamy ryzyko związane z podatnościami wynikającymi z haseł.</p>						</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-bfd0f02 e-con-full e-flex e-con e-child" data-id="bfd0f02" data-element_type="container">
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-31ecbdd e-flex e-con-boxed e-con e-parent" data-id="31ecbdd" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3a7057f elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action" data-id="3a7057f" 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">
						Jeśli Twoja firma potrzebuje pomocy przy wdrożeniu systemu IAM					</h2>
				
									<div class="elementor-cta__description elementor-cta__content-item elementor-content-item">
						skontaktuj się z nami. Posiadamy bogate portfolio zrealizowanych projektów. 					</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 do nas					</a>
					</div>
							</div>
						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>Artykuł <a href="https://inero-software.com/pl/praktyczne-wprowadzenie-do-keycloak-sso-od-konfiguracji-do-integracji/">Praktyczne wprowadzenie do Keycloak SSO: Od konfiguracji do integracji</a> 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">6522</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>
	</channel>
</rss>
