티스토리 뷰

WEB

Keycloak 시작하기 7

마시멜로co. 2025. 2. 18. 13:15

1. 인증 흐름 이해

keycloak에서 인증은 인증 흐름에 따라 ID 인증 방법을 정의하기 위해 그룹화된 일련의 순차적 단계 또는 실행으로 구성됩니다. 흐름에 따라 인증 요구 사항 및 realm에 인증을 수행하는 주체의  ID 검증 단계도 달라집니다.

keycloak은 최종 사용자 및 클라이언트가 realm에 인증하는 방법을 보여주는 정교한 흐름 집합을 갖고 있습니다. 

최종 사용자의 경우, 인증 흐름은 일반적으로 브라우저를 중개자로 사용합니다. 클라이언트 단계는 엔드포인트에 대한 백채널 요청을 기반으로 합니다.

keycloak은 흐름을 정의하는 것과 관련해서 매우 유연함을 갖고 있습니다. 기본적으로 realm은 최종 사용자 및 클라이언트를 인증하기 위한 가장 일반적인 요구사항을 처리하는 빌트인 정의로 생성되며,사용자 고유의 인증 요구 사항을 수행하기 위해 언제든지 변경하거나 확장할 수 있습니다.

좀더 정확하게 이해하기 위해 myrealm의 인증흐름 정의를 살펴보겠습니다. 해당 작업을 수행하려면 관리자 콘솔에 접근하여 좌측 사이드 메뉴의 Authentication를 클릭합니다.

 

해당 페이지에서 사전 정의된 인증 흐름을 선택 및 확인 할 수 있으며 realm의 모든 흐름 정의 리스트를 확인 할 수 있습니다. 현재 페이지에 있는 내용들을 모두 알고 있을 필요는 없습니다.

flow name을 클릭하면 해당 인증과 관련된 인증 흐름에 대한 관계를 보여줍니다 그중 브라우저 흐름은 최종 사용자가 브라우저를 사용해 인증을 수행하는 것과 관련돼 있습니다. 다이렉트 권한 부여 흐름 및 클라이언트 인증에도 동일한 동작 방식을 가집니다. 하지만 해당 흐름들은 클라이언트가 realm에 인증하거나 클라이언트가 토큰 엔드포인트를 사용해 토큰을 획득하기 위해 백채널 요청을 통해 사용자를 인증하는 것과 관련돼 있습니다.

 

2. 인증 흐름 설정

인증 흐름과 관련된 인증 흐름 정의 설정을 변경하거나 기존의 인증 흐름 정의 설정을 템플릿으로 생성할 수 있습니다.

흐름을 생성하는 가장 쉽고 권장되는 방법은 Flows 탭에서 정의를 선택해 기존 정의를 템플릿으로 사용하고 Duplicatie 버튼을 클릭하는 것입니다. 기존 정의를 템플릿으로 사용하는 이유는 변경사항을 쉽게 롤백할 수 있고, 변경사항으로 인해 흐름에 장애가 발생하더라도 기존 템플릿으로 돌아 갈 수 있기 때문입니다.

 

Browser Flow를 사용자 정의하는 방법에 대해 알아보고 브라우저를 사용해 realm에서 인증을 수행하는 최종 사용자에게 미치는 영향을 살펴보겠습니다.

 

해당 작업을 수행하려면 , Flows 탭의 선택박스에서 Duplicatie 버튼을 클릭합니다.

 

 

신규 생성된 흐름의 이름을 입력하라는 메시지가 표시됩니다. 이름을 My Browser로 입력하고 Duplicatie 버튼을 클릭합니다.

 

인증흐름은 다양한 인증 실행 및 다른 인증 흐름을 포함하는 계층 트리입니다. 인증 실행은 사용자를 인증할 때 몇가지 작업을 수행하는 실제 단계입니다.해당 작업들은 최종 사용자가 브라우저를 사용하는 경우 사용자 이름을 요청하는 것과 같이 사용자로부터 몇몇 정보를 획득하거나 서로 다른 유형의 자격증명을 통해 클라이언트를 인증하는 경우 특정 인증 메커니즘을 통해 사용자를 인증합니다.

인증 흐름의 요소는 위에서 아래로 순차적으로 실행됩니다.

 흐름의 단계를 실행할지 여부에 대한 결정은 현재 단계 및 해당 설정의 결과에 따라 달라집니다. 단계가 Required 로 설정된 경우 다음 단계로 이동하기 전에 해당 단계를 성공적으로 수행해야합니다. Required  단계가 성공적으로 완료되면 흐름에 다른 Required 단계가 없는 경우 흐름이 중지됩니다. Alternative 단계의 경우 단계가 정상적으로 완료 되지 않더라도 흐름은 진행됩니다. 따라서 다른 단계는 정상적으로 작업을 수행할 수 있습니다.

인증 흐름 및 하위 흐름의 경우 Required 및  Alternative 설정은 필수적인 전체 실행 또는 흐름 내의 실행이 성공적으로 완료되는 것과 관련돼 있습니다. 

My Browser 흐름 정의를 예시로 보면 인증은 다음과 같이 정의됩니다.

1) 먼저 쿠키 실행은 유효한 사용자 세션에 매핑되는 요청에 쿠키가 있는 경우 사용자를 원활하게 재인증합니다. 즉, 사용자가 이미 realm에 인증된 경우 인증을 수행하지 않습니다. 해당 단계는 Alternative 이며 사용자를 인증할 수 없는 경우 흐름은 계속 진행됩니다.

2) Kerberos 실행이 활성화 된 경우, Kerberos 자격 증명을 통해 사용자를 인증합니다. 기본적으로 비활성화돼 있습니다.

3) Identity Provider Redirect은 realm이 사용자를 사전 정의된 ID 제공자로 자동 리다이렉트하는 설정이 있는지 확인합니다. Alternative 단계이며 단계가 완료되지 않아도 흐름은 계속 수행됩니다.

4) My Browser Forms는 특정 단계를 그룹화하는 하위 흐름이며 패스워드 기반 및 OTP(one-time Password)dhk rkxdms 2FA를 통해 사용자를 인증합니다. 해당 단계는 Alternative 이며 따라서 위 단계 중 하나라도 정상적으로 완료되면 해당 단계는 실행되지 않습니다. 그렇지 않은 경우 사용자가 이미 인증됐더라도 자격증명을 다시 제공해야합니다.

5) 하위 흐름의 첫 단계는 Username Password Form을 사용하는 단일 단계에서 사용자 이름과 패스워드를 통해 사용자를 인증하는 것입니다. 이것은 realm에 인증을 수행할 때 확인했던 로그인 페이지입니다. 이 단계는 Required 단계이기 때문에 반드시 정상 수행돼야 합니다.

6) 5단계가 정상적으로 수행되면 사용자의 초기인증 OTP를 사용하는 2FA가 활성화돼 있는지 확인하기 위해 My Browser Browser - Conditional OTP라는 하위 흐름이 수행됩니다. 해당 하위 흐름에서 Condition - User Configured는 사용자가  OTP 자격증명 설정을 사용하고 있는지 확인하고, 해당 설정이 활성화된 경우 OTP를 토해 사용자를 인증하기 위해 OTP Form 단계를 수행합니다.

 

이제 단일 로그인 페이지에서 자격증명을 요청하는 대신 사용자 이름과 패스워드를 서로 다른 단계 및 페이지에서 수집해 사용자를 realm에서 인증하는 방법을 변경해보겠습니다. 

 

해당 작업을 수행하려면 Username Password Form 실행의 우측에 있는 삭제 아이콘을 클릭합니다.

 

My Browser Forms 우측에 있는 추가 아이콘을 클릭 Add step 버튼을 클릭합니다.

 

Username Form을 선택하고 Add 버튼 클릭합니다.

 

추가한 Username Form이 하위 흐름의 첫번째 실행이 될 수 있도록 아래 박스쳐진 아이콘에 마우스를 클릭하여 드래그합니다.

 

 

 

 

Username Form에서 했던 동일한 작업을 Password Form 인증 실행에도 동일하게 적용합니다.

Password Form 인증 실행은 하위 흐름에서 패스워드를 획득하고 사용자를 인증합니다. Password Form을 하위흐름에서 두번째로 실행되게 합니다.

Username Form 및 Password Form 실행을 Required 로 설정합니다. 해당 작업을 수행하려면 각 인증 실행의 Required 설정을 클릭합니다. Required  설정을 통해 최종 사용자가 realm에 로그인하는 경우 사용자 이름과 패스워드를 인증할 수 있기 때문에 해당 설정은 중요한 단계입니다. 

 

마지막으로 My Browser 인증 흐름 정의와 연동하기 위해 Action >  Bind flow 버튼을 눌러 Browser Flow를 변경합니다.

 

 

http://localhost:9090/realms/myrealm/account 브라우저에 접속하여 사용자 자격증명을 통해 로그인을 합니다. 

 

 

사용자 이름과 패스워드가 여러 단계에 걸쳐 활용되고 검증된다는 것을 알 수 있습니다.

 

 

3. 패스워드 사용 

우리는 기본적으로 사용자를 인증하기 위해 패스워드를 사용했습니다. 또한 사용자 관리 작업을 수행하는 경우 패스워드를 설정하는 방법을 간단하게 소개했습니다. 패스워드 기반 인증의 동작 방식과 패스워드 관리 방법을 자세히 알아 보겠습니다.

패스워드 기반 인증은 사용자를 인증하는 가장 널리 사용되는 방법 중 하나 일 것입니다. 패스워드 기반 인증은 구현하기 쉽고 대부분의 최종 사용자가 시스템에 인증하는 경우에 사용하는 방법입니다. 하지만 패스워드 기반 인증의 단순함은 몇몇 단점과 약점이 있습니다.

패스워드 기반 인증의 몇몇 단점을 극복하기 위해 Keycloak은 일반적으로 베스트 프랙티스를 활용해 전송 중이나 보관중인 패스워드가 안전한지 확인합니다. 또한 Keycloak에서 만료, 패스워드 포맷 및 이전 암호 재사용과 같은 패스워드 관리의 몇가지 주요 부분을 제어할 수 있도록 정책을 정의할 수 있습니다.

패스워드는 사용자의 자격증명 유형 중 가장 단순한 형태의 자격증명이며 Keycloak에서 기본적으로 사용자를 인증할 때 사용하는 방법입니다 패스워드는 사용자별로 관리됩니다. User details 페이지의 Credentials 탭에서 사용자의 패스워드를 리셋하거나 삭제할 수 있습니다.

 

Keycloak은 강력한 패스워드 해싱 알고리즘을 사용해 브루트-포스(brute-force) 공격을 방지하며, 패스워드를 안전하게 저장합니다. Keycloak에서 사용하는 기본 해싱 알고리즘은 PBKDF2이며, 해당 알고리즘 잘 알려지고 널리 사용되는 알고리즘으로 패스워드를 안전하게 저장합니다.

사용자의 패스워드를 설정하는 경우, 해당 패스워드는 salt라고 알려진 보안 랜덤 숫자와 결합하고 해킹하기 어려운 파생키를 생성하기 위해 여러번의 해시를 수행합니다. 패스워드를 저장하는 경우 절대 평문으로 저장되지 않습니다. 그 대신 파생된 키가 추후 패스워드를 확인하기 위해 필요한 메타데이터와 함께 저장됩니다.

Keycloak은 HMAC-SHA-256을 사용해 패스워드에 대한 해시수행을하고 27,500번의 반복 횟수가 설정돼 있습니다. HMAC-SHA-256와 같은 더 강력한 해싱 알고리즘을 사용하거나 패스워드 정책을 설정할 때 반복 횟수를 변경할 수 있습니다.

패스워드 기반 인증은 여러 약점을 갖고 있기 때문에 사용자를 인증하는데 가장 강력한 방법은 아닙니다. 몇가지 예를 들면 패스워드는 일반적으로 도난을 당하거나 유출되며 피싱 공격에 취약합니다. 그리고 일부 사용자는 강력한 패스워드를 사용하지 않으며 시스템은 사용자가 패스워드를 정의, 유지 및 사용하는 수준만큼의 보안 수준을 가집니다. 사용자는 보통 여러 시스템에서 동일한 패스워드를 사용하기 때문에 가장 취약한 시스템만큼의 보안 수준을 갖게 됩니다.

사용성 측면에서 정책을 사용해 사용자에게 강력한 패스워드를 사용하도록 강제할 경우 패스워드가 길어지고 복잡해져서 사용자가 시스템에 인증할 경우, 패스워드를 기억하지 못하거나 입력하기 어려워집니다.

Keycloak은 패스워드 기반인증의 전반적인 보안을 개선할 수 있지만 모든문제를 해결하지 못합니다. 패스워드는 단독으로 사용될 경우 사용자를 인증하기 위한 단일요소이므로 시스템의 전반적인 보안을 향상시키기 위해 추가 요소를 사용하는 것을 고려해야합니다. 

패스워드 기반 인증은 Keycloak에서 사용자를 인증하는데 필요한 유일한 옵션은 아니며, 다른 형식의 인증을 결합하거나 패스워드를 완전히 제거해 시스템에 강력한 인증을 적용할 수 있습니다. 

 

4. 패스워드 정책 변경

Keycloak에서 패스워드와 관련된 유형이 정책을 정의할 수 있습니다. 해당 정책은 좌측 사이드메뉴에 있는 Authentication을 클릭한 다음 Password Policy 탭을 클릭하여 생성할 수 있습니다. 

 

해당 탭에서 다양한 정책을 선택하고 다음과 같이 특정 패스워드 관리 설정을 변경할 수 있습니다.

- 패스워드에 특수문자, 숫자, 소문자 또는 대문자의 개수를 적용합니다.

- 패스워드의 최소 길이를 정의합니다.

- 패스워드의 만료 시간을 정의합니다.

- 패스워드에 사용자 이름이 포함되는 것을 방지합니다.

- 블랙리스트 사전을 정의합니다.

- 이미 사용중인 패스워드를 재사용하지 않도록 합니다.

 

Add policy 선택박스를 클릭하여 위와 같은 패스워드 정책을 설정할 수 있습니다. 패스워드 정책을 활용해 더 강력한 패스워드 및 패스워드 갱신 주기를 설정해 패스워드 기반 인증의 몇몇 약점을 개선할 수 있습니다.

 

5. 사용자 패스워드 리셋

Keycloak에서 여러가지 방법으로 사용자 패스워드를 리셋할수 있습니다. 관리자는 관리자 콘솔을 사용해 사용자의 패스워드를 선택하거나 사용자가 로그인할 때 패스워드를 업데이트하도록 설정할 수 있습니다. 또한 사용자는 로그인 페이지에서 패스워드를 리셋하거나 Keycloak 계정 콘솔을 통해 계정을 관리할 수 있습니다.

관리자 콘솔을 통해 사용자의 패스워드를 변경하는 경우, Keycloak은 기본적으로 신규 패스워드를 임시로 발급합니다. 임시 패스워드는 사용자가 추후 realm에 로그인하는 경우 신규 패스워드를 입력해야합니다.

User datils 페이지의 Credentials 탭에서 임시 스위치를 활성화해 관리자가 설정한 패스워드의 임시 패스워드 여부를 제어할 수 있습니다. 임시 스위치를 비활성화하면 사용자가 로그인할때 패스워드 변경요청을 받지 않습니다. 임시패스워드는 사용자가 패스워드 업데이트 수행하도록 하기 위한 간단한 설정입니다.

 

Update Password의 required action은 관리자가 언제든지 특정 사용자가 패스워드를 업데이트하도록 설정할 수 있습니다. 

 

사용자 입장에서 Keycloak 계정 콘솔을 사용하거나 로그인 페이지에서 특정 흐름을 시작함으로써 패스워드를 업데이트할 수 있습니다. 사용자는 계정 콘솔에서 Signing in 페이지의 Update 버튼을 클릭하여 패스워드를 변경할 수 있습니다. 

 

사용자가 패스워드를 잊어버리거나 분실했을 경우 패스워드를 리셋하기 위해 로그인 페이지에서 특정 흐름을 사용할 수 있습니다. 해당 흐름은 기본적으로 비활성화되어있습니다.

활성화하려면 관리자 페이지에서 Realm settings > Login 탭 > Forgot password 를 활성화합니다. 

 

 

사용자가 패스워드를 리셋하기 위해 클릭할 수 있는 링크가 로그인 페이지에 표시됩니다.

 

Forgot password? 링크를 클릭하면 사용자 패스워드를 리셋하기 위한 링크를 이메일로 수신할 수 있도록 사용자 이름 또는 이메일을 제공하라는 메시지가 표시됩니다.

 

6. OTPs 사용

Keycloak은 추가 보안계층으로 사용자를 인증하는 경우 이중 인증 요소 또는 증거를 사용할 수 있습니다. 사용자는 패스워드를 제공하는 것 욍에도 자신의 ID에 대한 추가 증거를 제공해야할 의무가 있으며 해당 증거는 코드 또는 보안키가 될 수 있습니다.

OTP는 사용자 계정에서 2FA를 활성화하는 가장 일반적인 방법 중 하나 입니다.상대적으로 사용하기 쉽고 사용자를 읹ㅇ하는 경우 추가적인 보안을 제공합니다.

OTP는  2FA를 구현하기 위한 유용한 방법이지만 몇가지 단점이 있습니다. OTP는 서버와 사용자간의 공유키를 사용하며 최종 사용자에게 높은 사용자 편의성을 제공하지 않으며 피싱 또는 스캠과 같은 공격에 취약합니다. 이 문제를  Keycloak 은 WebAuthn 보안 기기를 이중 요소로 사용해 OTP 약점을 보완할 수 있습니다.

Keycloak에서 OTP를 사용해 사용자 구성과 인증을 손쉽게 수행하며 realm이 자동으로 OTP 기반의  2FA를 지원하도록 설정됩니다. 사용자는 또한 OTP코드를 생성하기 위한 기기를 등록해 사용자 계정의 2FA를 쉽게 설정 할 수 있습니다. 

 

7. OTP 정책 변경

Keycloak에서 서로 다른 OTP정책을 정의할 수 있습니다. 해당 정책들은 좌측 메뉴에 있는 Authentication 링크를 클릭한 다음 OTP Policy 탭을 클릭해 변경할 수 있습니다. 

 

OTP는 특정 알고리즘을 사용해 해시된 비밀키와 사용자를 인증하기 위해 일회성으로 사용할 수 있는 현재 시간 또는 카운터와 같은 이동 계수(moving factor)를 기반으로 사용하는 코드입니다. Keycloak은 두가지 알고리즘을 사용해 사용자가 코드를 인증하도록 생성할 수 있습니다.

- Time-Based One-Time Password(TOTP)

- HMAC-Based One-Time Password(HOTP)

 기본적으로 Keycloak에서 작성된 realm은 TOTP를 사용하도록 설정됩니다. 또한 6자리로만 구성되며 30초간의 유효시간을 가집니다 필요한 경우 언제든지 해당 설정을 변경할 수 있습니다. 

TOTP와  HOTP 알고리즘의 차이점은 코드를 생성하는데 사용되는 이동 계수와 검증 방법입니다. 이름에서 알수있듯이 TOTP는 시간을 기반으로 하므로 코드는 특정 시간 동안의 유효 시간을 가집니다. 반면 HOTP는 카운터를 기반으로 동작합니다. 코드의 유효성은 코드가 검증되고 카운터가 증가하지 전까지 무한합니다.

어떤 알고리즘을 사용해야 하는지는 사용자 환경에 따라 달라집니다. 하지만 TOTP가 HOTP 보다 더 높은 보안성을 제공합니다. 코드를 분실하거나 유출된 경우 TOTP의 유효 기간이 줄어들기 때문에 OTPs를 사용하는 경우 공격 표면을 감소시킬 수 있습니다.

사용자의 입장에서 Keycloak은 사용자가 안드로이드와 iOS앱스토어에서 다운받을 수 있는 2가지 주요 모바일 애플리케이션을 사용해 스마트폰이나 태블릿과 같은 자신의 개인 기기에서 OTP 코드를 획득할 수 있습니다.

 - FreeOTP

- Google Authenticator

 

9. 사용자가 OTP 사용여부를 선택할 수 있도록 허용

패스워드를 사용해 사용자가 성공적으로 인증을 수행하면 Keycloak은 사용자가 계정 연동된 OTP 자격증명을 갖고 있는지 확인합니다. OTP 자격증명이 설정되지 않은 경우 Keycloak은 사용자를 인증하고 애플리케이션으로 다시 리다이렉트시킵니다. 위 과정들은 사용자가 realm에 인증을 수행하면서 거치는 과정들입니다.

반면 OTP 자격증명이 설정된 사용자의 경우 Keycloak은 사용자 인증을 수행하기 전에 사용자의 OTP를 획득하고 검증하기 위해 인증 흐름 과정에서 추가적인 단계를 수행해야합니다. 테스트 계정 콘솔에 로그인하여 OTP 획득 및 검증 과정을 확인해봅니다.

계정 콘솔에 로그인하여 Signing In 페이지에서  Set up Authenticator Application 버튼을 클릭해 OTP를 통해 2FA를 설정할 수 있습니다.

 

신규 인증자 설정을 선택하면 코드를 생성하기 위해 사용할 공유키를 포함한 QR 코드가 사용자에게 표시됩니다. 스마트폰을 사용하면 FreeOTP 또는 Google Authenticator (현재 기준 앱 이름 : Google OTP ) 모바일 애플리케이션을 통해 해당 QR 코드를 스캔할 수 있습니다. 

 

인증자를 사용해 QR코드를 스캔하면 OTP 자격증명 등록 프로세스를 수행하고 해당 프로세스를 수행한 후 사용자를 인증하기 위해 사용할 코드를 생성합니다. TOTP를 사용하는 경우 해당 코드는 30초마다 생성됩니다.

OTP 자격증명 등록 프로세스를 수행하려면 사용 중인 모바일 애플리케이션의 코드를 사용해 one-time code필드를 설정하고 submit 버튼을 클릭합니다. 필요한 경우 사용자는 생성한 OTP 자격 증명의 별칭을 정의할 수 있습니다.

 

다시 한번 로그인을 하기위해 좌측 상단 코너에 있는 Sign Out 버튼을 클릭해 콘솔에 로그아웃하고 인증을 수행합니다. 

 

OTP 설정하기 전과 비교했을대 이번에는 코드를 제공을 요청하는 페이지가 표시됩니다. 스마트폰을 사용해 코드를 획득하고 one-time code 필드에 입력하여 로그인합니다. 

 

10. OTP를 통한 사용자 인증 활성화

몇몇 OTP 활용 사례에서 OTP 사용여부는 사용자의 요구가 아닌 realm에 정의된 보안정책을 기반으로 설정됩니다. keycloak을 사용하면 OTP 인증의 기본 동작을 변경해 인증 전에 사용자가 OTP 자격 증명을 설정하거나 기존 자격 증명을 성공적으로 realm에 인증을 수행합니다.

해당 설정을 활성화 하려면 좌측 메뉴의 Authentication 을 클릭하고 사용가능한 흐름 리스트에서 Browser를 선택합니다.

Browser-conditional OTP를 Required로 설 합니다.

 

그 후 사용자 계정 설정으로 가서 연동된 otp 자격증명을 제거합니다.

 

 

다시 http://localhost:9090/realms/myrealm/account 사용자 콘솔에 로그인합니다.

 

기존과는 다르게 사용자는 이제 OTP 자격증명을 설정해야합니다.

 

11. 웹 인증 활용

웹인증 즉 , WebAuthn 프로토콜은 인터넷에서 사용자 인증의 유용성과 보안을 개선하기 위해 사용됩니다. 즉 암호화 프로토콜을 사용해 사용자를 인증하기 위해 브라우저를 중개자로 사용해 서버와 보안 기기가 서로 통신 할 수 있는 추가 기능을 제공합니다. 

 WebAuthn은 비대칭 키를 기반으로 사용자의 기기를 안전하게 등록하고 시스템에서 사용자를 인증합니다. 기기와 서버에서 공유되는 키를 사용하지 않으며 공개키만 사용합니다. 보안기기와 서버사의 중개자 역할을 수행함으로써  WebAuthn은 생체 정보를 통해 해당 기기들을 2FA, MFA로 활용하거나 보안 기기 이외의 명시적 자격증명 없이 사용자를 원활하게 인증할 수 있도록 해줍니다.

2FA에 사용할 경우  WebAuthn은 Keycloak과 코드 생성에 사용되는 서드파티 애플리케이션에 공유 키가 없기 떄문에 OTP보다 더 안전합니다. 대신 사용자는 민감한 데이터를 노출하지 않고 2FA와 통신하기 위해 강력한 암호화를 사용하는 보안 기기를 소지해야합니다.  WebAuthn은 패스워드 또는 OTP코드를 처리할 필요가 없기 떄문에 사용자가 싯템에 인증을 수행할 경우 더 나은 펴의성을 제공합니다.

보안 기기 또는 인증자는 FIDO2의 요구사항을 준수하는 경우 어떠한 것도 사용할 수 있습니다. 지문을 지원하는 스마트폰, USB에 포함된 보안키, NFC(Near-field Communication) 기기 를 사용할 수 있습니다.  WebAuthn은 해당 기기를 통해 사용자가 등록하고 인증하는 방법에 대해 다양한 측면에 세부적으로 제어할 수 있습니다 기기를 소유한 사용자의 ID를 확인하는 방법에 대한 요구사항을 제어하거나 자격증명을 기기에 저장할 수도 있기 떄문에 서버에 자격증명을 저장해야 하는 필요성을 제거할 수 있습니다.

Keycloak에서 WebAuthn을 통해 다음과 같은 다양한 이용 사례를 해결 할 수 있습니다.

- 사용자 인증 과정 또는 계정 콘솔을 사용해 기기를 등록한다.

- OTP의 좀더 안전한 대안으로 2FA용 보안 기기를 사용한다.

- 보안 기기에서 지원하는 모든 형태의 생체 인증을 사용해 MFA용 보안기기를 사용한다.

- 사용자 이름 또는 패스워드가 없는 인증에 보안 기기를 사용한다.

또한 사용자가 로그인 페이지에서 다양한 인증 방법을 선택할 수 있습니다.

예를 들어 WebAuthn을 통해 패스워드 없는 인증 또는 OTP를 이중 인증으로 사용하는 패스워드 기반 인증 사용 여부를 사용자가 선택할 수 있습니다. 

 

12. 인증 흐름에서 WebAuthn 활성화

사용자가 기기를 사용해 인증을 수행하려면 WebAuthn을 지원하는 인증 흐름 정의를 생성해야합니다.

다음 단계를 통해 신규흐름을 생성합니다.

  browser을 복제 -> My WebAuthn 이름으로 생성합니다.

 

My WebAuthn Browser -Conditional OTP 하위 흐름은 OTP Form 실행 삭제

My WebAuthn Browser -Conditional OTP 우측 추가 아이콘 클릭 > Add step 클릭

 

My WebAuthn Browser -Conditional OTP 하위 흐름에 WebAuthn Authenticator 선택 Add 버튼 클릭

WebAuthn Authenticator을 Required로 설정,  My WebAuthn Browser -Conditional OTP 을 Conditional로 설정

My WebAuthn  우측 Action > Bind flow 클릭 > Browser flow로 설정.

 

 

OTP Form 실행을 WebAuthn Authenticator 실행으로 변경한 것 외에는 변경사항이 없습니다. 사용자가 아직 보안 기기 설정을 하지 않았기 때문에 로그인을 수행하면 아직까지 패스워드를 통해 로그인을 할 수 있습니다.

계정 콘솔에서 보안기기를 등록하는 방법을 알아보겠습니다.

 

13. 보안기기 등록 및 인증

WebAuthn을 realm에 활성화하기 위한 첫번째 단계는 사용자의 기기를 등록하는 것입니다. 패스워드 및 OTP와 마찬가지로 보안 기기의 등록은 특정 required action을 수행해야합니다.

좌측메뉴에 있는 Authentication 링크를 클릭한 다음 Required Action 탭을 클릭합니다.

 

Webauthn Register 액션  On 버튼을 클릭합니다.

 

Webauthn Register 을 활성화하면 계정 콘솔에서 보안기기를 등록할 수 있습니다. 

http://localhost:9090/realms/myrealm/account 에 로그인합니다.

Signing In > Set up Passkey 버튼을 클릭합니다.

 

신규 기기를 등록하려면 Register버튼을 클릭합니다.

 

사용자로 인증을 수행하는 경우 인증을 완료하기 위해 보안 기기와 상호작용을 요청하는 메시지가 표시됩니다. 이러한 작업은 OTP를 이중 인증으로 사용하는 방법과 유사하지만 사용자는 특정코드를 입력하거나 전송할 필요가 없습니다.

 

 

14. 강력한 인증 사용

강력한 인증은 최근 널리 사용되는 용어입니다. 해당용어의 정의는 강력한 인증이 사용되는 상황에 따라 다릅니다.일반적으로 강력한 인증은 사용자를 인증하기 위해 이중 인중 또는 다중 인증을 적용하는 것을 의미합니다.

이미 살펴본 것처럼 Keycloak은 realm에 대한 2FA (Two-factor authentication 2단계 인증) 또는 MFA(Multi Factor Authentication 다중인증)를 활성화하는데 필요한 기능을 제공합니다. 2FA를 통해 강력한 인증 요구 사항을 수행하는 경우 WebAuthn을 통해 OTP 또는 보안 기기를 사용하면 됩니다.

하지만 MFA는 아마도 생체 인증을 통해 사용자를 안전하게 식별하고 인증하는 핵심 측면을 가진 가장 강력한 인증 유형일 것입니다. 이와 같은 경우 , WebAuthn을 사용해 사용자의 ID(예를들어 지문인식)를 인증하기 위해 보안 기기를 설정하고 인증을 시도하는 사용자가 해당 보안 기기를 사용 중인지 확인할 수 있습니다.

또한 강력한 인증에는 2FA (Two-factor authentication 2단계 인증) 또는 MFA(Multi Factor Authentication 다중인증)를 활용해 IP주소 히스토리 및 사용자가 인증을 수행하기 위해 사용하는 기기와 같은 여러가지 인증 요소를 활성화하는 것도 포함됩니다.이와 같은 경우 위험 점수 또는 사용자의 행동을 기반으로 사용자를 인증하는 최적의 요소를 선택할 수 있습니다. 또는 사용자가 민감한 데이터에 접근하거나 시스템에서 중요한 작업을 수행하는 경우 사용자에게 재인증을 요청할 수 있습니다. keycloak-26.0.7 기준, 아직까지는  Keycloak은 적응형 인증 , 리스크 기반 인증 또는 단계형 인증과 같은 범용 인증을 자체적으로 지원하지는 않습니다. 하지만 Keycloak은 realm에 대한 새로운 유형의 인증을 구성하고 구현하는 방법에 있어서 매우 유연합니다. Keycloak은 개발자들이 핵심 기능을 확장하기 위해 사용하는 SPIs(Service Provider Interfaces) 집합을 제공합니다.

 

'WEB' 카테고리의 다른 글

Keycloak 시작하기 9  (0) 2025.02.20
Keycloak 시작하기 8  (0) 2025.02.19
Keycloak 시작하기 6  (0) 2025.02.11
Keycloak 시작하기 5  (0) 2025.02.11
Keycloak 시작하기 4  (1) 2025.02.10
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크