1. 개요

Keycloak 은 웹 또는 모바일 애플리케이션의 인증 및 권한 부여 요구 사항을 관리하는 데 사용되는 타사 권한 부여 서버입니다. 기본 로그인 페이지를 사용하여 앱을 대신하여 사용자를 로그인합니다.

이 예제에서는 다른 모양과 느낌을 가질 수 있도록 Keycloak 서버의 로그인 페이지를 사용자 정의하는 방법에 중점을 둘 것입니다. 독립형 서버와 내장형 서버 모두에서 이를 확인할 수 있습니다.

이를 위해 Keycloak 예제위한 사용자 정의 테마를 기반으로 구축 할 것입니다.

2. 독립형 Keycloak 서버 사용자 정의

사용자 정의  테마 의 예를 계속 진행  하여 독립 실행형 서버를 먼저 살펴보겠습니다.

2.1. 관리 콘솔 설정

서버를 시작하려면 Keycloak 배포가 보관된 디렉터리로 이동하고 bin 폴더 에서 다음 명령을 실행 합니다.

./standalone.sh -Djboss.socket.binding.port-offset=100

서버가 시작되면 이전에 standalone.xml 을 수정한 덕분에 페이지를 새로 고쳐 변경 사항이 반영되었는지 확인하기만 하면 됩니다  .

이제 theme/custom 디렉토리 안에 login 이라는 새 폴더를 생성해 보겠습니다  . 간단하게 하기 위해 먼저 theme/keycloak/login 디렉토리 의 모든 내용을 여기에 복사합니다  . 이것은 기본 로그인 페이지 테마입니다.

그런 다음 관리 콘솔 로 이동 하여  initial1 / zaq1!QAZ 자격 증명  을 입력하고 영역 테마 탭으로 이동합니다  .

로그인 테마에 대해 사용자 지정선택 하고 변경 사항을 저장합니다.

이 세트를 사용하여 이제 몇 가지 사용자 정의를 시도할 수 있습니다. 하지만 그 전에 기본 로그인 페이지를 살펴보겠습니다 .

 

2.2. 사용자 정의 추가

이제 배경을 변경해야 한다고 가정해 보겠습니다. 이를 위해 login/resources/css/login.css를 열고 클래스 정의를 변경합니다.

.login-pf body {
    background: #39a5dc;
    background-size: cover;
    height: 100%;
}

효과를 보려면 페이지를 새로고침하세요.

다음으로 사용자 이름과 비밀번호의 레이블을 변경해 보겠습니다.

이를 위해서는 theme/login/messages 폴더 에  새 파일 messages_en.properties 를 만들어야 합니다. 이 파일은 지정된 속성에 사용되는 기본 메시지 번들을 재정의합니다.

usernameOrEmail=Enter Username:
password=Enter Password:

테스트하려면 페이지를 다시 새로고침하세요.

HTML 전체 또는 일부를 변경하려는 경우 Keycloak이 기본적으로 사용하는 프리마커 템플릿을 재정의해야 한다고 가정합니다. 로그인 페이지의 기본 템플릿은 base/login 디렉토리에 보관됩니다 .

SPRINGBOOTKEYCLOAK 대신 WELCOME TO BAELDUNG 이 표시 되기를 원한다고 가정해 보겠습니다 .

이를 위해 base/login/template.ftlcustom/login 폴더 에 복사해야 합니다.

복사한 파일에서 다음 행을 변경합니다.

<div id="kc-header-wrapper" class="${properties.kcHeaderWrapperClass!}">
    ${kcSanitize(msg("loginTitleHtml",(realm.displayNameHtml!'')))?no_esc}
</div>

NS:

<div id="kc-header-wrapper" class="${properties.kcHeaderWrapperClass!}">
    WELCOME TO BAELDUNG
</div>

이제 로그인 페이지에 영역 이름 대신 사용자 정의 메시지가 표시됩니다.

3. 내장형 Keycloak 서버 사용자 지정

여기서 첫 번째 단계는 독립형 서버에 대해 변경한 모든 아티팩트를 임베디드 인증 서버의 소스 코드에 추가하는 것입니다.

따라서 다음 내용으로 src/main/resources/themes/custom 내부에 새 폴더 로그인을 생성해 보겠습니다 .

이제 로그인 테마 유형에 사용자 지정 이 사용 되도록 영역 정의 파일인 baeldung-realm.json 에 명령을 추가하기만 하면 됩니다.

 

"loginTheme": "custom",

서버가 로그인 페이지의 테마 파일을 선택할 위치를 알 수 있도록 사용자 정의 테마 디렉토리로 이미 리디렉션했습니다 .

테스트를 위해 로그인 페이지를 실행해 보겠습니다 .

보시다시피 배경, 레이블 이름 및 페이지 제목과 같이 독립 실행형 서버에 대해 이전에 수행한 모든 사용자 지정이 여기에 표시됩니다.

4. Keycloak 로그인 페이지 우회

기술적으로 암호 또는 직접 액세스 권한 부여 흐름 을 사용하여 Keycloak 로그인 페이지를 완전히 우회할 수 있습니다 . 그러나 이 권한 부여 유형은 전혀 사용하지 않는 것이 좋습니다.

이 경우 인증 코드를 받은 다음 그 대가로 액세스 토큰을 받는 중간 단계가 없습니다. 대신 REST API 호출을 통해 사용자 자격 증명을 직접 보내고 응답으로 액세스 토큰을 얻을 수 있습니다.

이는 효과적으로 로그인 페이지를 사용하여 사용자의 ID와 암호를 수집하고 클라이언트 ID 및 비밀과 함께 이를 토큰 끝점 에 대한 POST에서 Keycloak으로 보낼 수 있음을 의미 합니다.

그러나 Keycloak은 몇 가지 예를 들면 기억하기, 비밀번호 재설정 및 MFA와 같은 로그인 옵션의 풍부한 기능 세트를 제공하기 때문에 이를 우회할 이유가 거의 없습니다.

5. 결론

이 예제에서는 Keycloak의 기본 로그인 페이지를 변경하고 사용자 정의를 추가하는 방법을 배웠습니다 .

우리는 독립 실행형 인스턴스와 임베디드 인스턴스 모두에서 이것을 보았습니다.

마지막으로 Keycloak의 로그인 페이지를 완전히 우회하는 방법과 그렇게 하지 않는 이유에 대해 간략하게 살펴보았습니다.

항상 그렇듯이 소스 코드는 GitHub에서 사용할 수 있습니다. 독립 실행형 서버의 경우 사용방법(예제) GitHub 에 있고 임베디드 인스턴스의 경우 OAuth GitHub 에 있습니다 .

Generic footer banner