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

<image>
	<url>https://inero-software.com/wp-content/uploads/2018/11/inero-logo-favicon.png</url>
	<title>sms - Inero Software - Rozwiązania IT i Konsulting</title>
	<link>https://inero-software.com/pl/tag/sms/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">153509928</site>	<item>
		<title>Tworzenie niestandardowego uwierzytelniania SMS w Keycloak</title>
		<link>https://inero-software.com/pl/tworzenie-niestandardowego-uwierzytelniania-sms-w-keycloak/</link>
		
		<dc:creator><![CDATA[Marceli Formela]]></dc:creator>
		<pubDate>Fri, 14 Jun 2024 11:01:51 +0000</pubDate>
				<category><![CDATA[Blog_pl]]></category>
		<category><![CDATA[Firma]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[cyberbezpieczeństwo]]></category>
		<category><![CDATA[keycaloak]]></category>
		<category><![CDATA[MFA]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[SMS MFA]]></category>
		<category><![CDATA[SPI]]></category>
		<category><![CDATA[uwierzytelnianie]]></category>
		<guid isPermaLink="false">https://inero-software.com/?p=5868</guid>

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

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

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