Programming-[Backend] (417) 썸네일형 리스트형 Keycloak Infinispan 통신 방식 정리: udp, jdbc-ping, kubernetes 배경keycloak은 여러 instance간 infinispan cache를 통해 세션 정보 등을 동기화한다. 그리고 이런 동기화에 쓰일 통신의 스택 정보를 KC_CACHE_STACK 옵션을 통해 설정할 수 있다. https://www.keycloak.org/server/caching#_transport_stacks 26.0.1 버전까지 udp가 기본 스택이였으나 26.2.1로 버전업을 하면서 jdbc-ping 방식이 default로 변경되었다고 한다. 어짜피 k8s 환경이라 kubernetes 스택을 사용하고 있었는데, 이번 기회에 정리를 좀 하고 가야겠다는 생각이 들었다. 각 방식별 특징 1. UDPUDP는 보통 네트워크에서 TCP/UDP로 OSI 7 Layer 개념에서 4 Level Layer로.. keycloak upstream header is too big. 502 Gateway Error w/ nextAuth 배경keycloak을 k8s headless service로 운영하고, 앞단에 nginx proxy 서버를 두는 구조에서 클라이언트 쪽에서 아래 메시지와 함께 에러가 발생했다. upstream sent too big header while reading response header from upstream Syntax: client_header_buffer_size size; Default: client_header_buffer_size 1k; Context: http, server 그러면서 502 Gateway Error가 나는 문제였다. 원인클라이언트에서 nextAuth.js 라는 라이브러리를 사용하고 있었는데, keycloak에서 내보내는 3가지 쿠키(KEYCLOAK_SESSION, KEYCLOA.. Keycloak 성능 테스트 - 특정 url 호출 확인(userinfo) 이전 글에 이어서 특정 endpoint를 호출하는 커스텀 성능 테스트에 대해 기록한다. https://whitepro.tistory.com/1115 keycloak benchmark 성능 테스트 w/ kubernetes whitepro.tistory.com 소스 코드를 까서, get 요청을 아래처럼 변경해주었다. 주석 부분이 기본으로 있던 Get 요청이다.package keycloak.scenario.basicimport keycloak.scenario.{CommonSimulation, KeycloakScenarioBuilder}import org.keycloak.benchmark.Configimport io.gatling.core.Predef._import io.gatling.http.Predef... Keycloak CODE_TO_TOKEN_ERROR: cookie와 roles 배경keycloak에서 일반 유저가 로그인을 하다가 CODE_TO_TOKEN_ERROR가 발생했다. authorization code를 클라이언트가 keycloak으로부터 발급받고, 이를 다시 keycloak에 전달하여 keycloak에서 access_token을 받아오는 과정에서 에러가 난 것이다. 처음에는 원인을 잘 몰라서 헤맸지만 특정 유저에게서만 에러가 발현된다는 점에 착안하여 문제 범위를 좁혀나갔다. 그리고는 특정 유저들에 roles가 너무 많이 할당되어 에러가 나는 것을 확인하게 되었다. 원인roles를 너무 많이 부여하면, token에도 resource_access 항목이 길어지고 token이 포함된 cookie의 용량이 커지게 되거나 get 요청이 과다하게 길어지면서 로그인에 실패할 수 .. keycloak benchmark 성능 테스트 w/ kubernetes 보호되어 있는 글입니다. [TIL] mockStatic 개요static 클래스를 테스트해야할 경우가 발생했다. 아래와 같이 Spring의 의존성 없이 Factory 메서드로 DI를 구현할 때, Factory 자체를 mock 처리해야했다. SmsServiceFactory.get(config.getConfig()).send(normalizeMobileNumber, smsText); 이 때 SmsServiceFactory의 get 메서드 자체를 mock 처리하기 위해서 mockStatic을 사용했다. 기본적으로 Mockito는 인스턴스 메서드(Mock 객체)만 지원하지만, Java의 static 메서드는 인스턴스 없이 호출되므로 기본적인 @Mock이나 when()을 사용할 수 없다. 이를 해결하기 위해 Mockito 3.4+ 버전부터 mockStatic()을 제공.. [TIL] Keycloak - Google IDP Social Login시 prompt 설정 Google IDP Prompt 설정 keycloak에서 Google IDP를 설정하여 소셜 로그인을 할 때, 일부 환경(시크릿 모드 등)에서는 계정을 선택하는 화면이 나오지 않고 바로 로그인 되거나, 에러가 발생하는 경우가 발생한다. 이럴 경우 Keycloak admin console -> Identity providers -> Google -> Prompt 설정 값에 select_account 값을 넣어주면 된다. 그럼 이를 구글 요청 시 구글에서 인식하여 항상 계정 선택 화면을 띄우게 된다. 여러 개의 구글 계정을 갖고 있는 사람들이 많으므로 이런 설정을 해두는 것이 좋다. keycloak user info endpoint 설정 user info endpoint keycloak에서 사용자의 정보가 변경되었을 때, 클라이언트가 해당 사용자 정보를 조회해서 최신 정보를 확인해야하는 경우가 있을 수 있다. 이를 위해 Keycloak은 user info endpoint를 제공한다. 이는 OIDC 표준 endpoint이기도 하다. 사용을 위해서는 특정 User가 특정 Client에 로그인하고 Access Token을 발급받은 상태여야한다. 그리고 User Info endpoint의 Authorization header에 이 토큰을 전달해줘야한다. Access Token을 발급받기 위해 client을 생성한다. 그리고 해당 client에 user info 요청이 들어왔을 때 정보를 전달해주도록 mapper 설정을 해줘야한다. Clients.. 이전 1 2 3 4 5 ··· 53 다음