Logto 제품 업데이트
Logto v1.41.0 은 앱 수준 액세스 제어, 비밀번호 만료 정책, 주요 계정 센터 업그레이드, 구성 가능한 사용자 이름 및 인증 코드 규칙, 더 안전한 메시지 전송, 프로토콜/보안 강화 라운드를 제공합니다.
Logto v1.41.0 은 제어와 보안에 초점을 맞춘 릴리즈입니다. 이제 팀은 각 앱에 누가 접근할 수 있을지 더 세밀하게 결정할 수 있고, 비밀번호 라이프사이클 관리를 더욱 완전하게 통제하며, 엔드 유저를 위한 계정 센터의 기능이 대폭 향상되었습니다. 또한 인증 코드 전송, 사용자 이름 규칙, SAML/OIDC 처리, MFA 재사용 방지, 셀프 호스팅 업그레이드 경로 등도 강화되었습니다. 이번 버전의 주요 변경사항은 다음과 같습니다.
앱 수준 액세스 제어
이제 Logto 에서 직접 애플리케이션에 대한 접근을 제한할 수 있습니다. 접근 규칙은 특정 사용자, 사용자 역할, 조직, 조직 역할을 대상으로 적용할 수 있습니다.
사용자가 설정된 규칙과 일치하지 않으면, Logto 는 계속 접근을 허용하지 않고 '접근 거부' 페이지로 로그인이나 앱 접근 흐름을 차단합니다. 이 기능을 통해 고객별 접근 관리, 내부 도구 보호, 조직 범위 접근 등 다양한 시나리오에서 앱 롤아웃과 접근관리를 애플리케이션 코드에 전가하지 않고 쉽게 할 수 있습니다.
자세한 설정 방법은 앱 수준 접근 제어 문서 를 참고하세요.
비밀번호 만료 정책
Console 에서 이제 보안 > 비밀번호 정책 메뉴를 통해 테넌트 단위 비밀번호 만료를 설정할 수 있습니다.
관리자는 비밀번호 만료 여부를 켜고, 비밀번호의 유효 일수를 설정하며, 특정 사용자의 비밀번호를 사용자 상세 페이지에서 수동으로 만료시킬 수 있습니다. 비밀번호가 만료되면, 해당 사용자는 설정된 복구 방법을 통해 비밀번호를 재설정해야만 비밀번호 로그인을 계속할 수 있습니다.
SSO 와 패스키(패스워드리스) 로그인은 이 정책의 영향을 받지 않습니다. 비밀번호 변경 시점이 기록되어 있지 않은 기존 사용자도 문제없이 처리됩니다. 정책이 활성화된 시점을 기준으로 만료 기간이 산정되므로, 기존 사용자가 즉시 만료되는 일이 없습니다.
계정 센터의 셀프 서비스 기능 향상
엔드 유저를 위한 셀프 서비스 아이덴티티 환경으로써 계정 센터가 지속적으로 성장하고 있습니다.
이번 릴리즈에는 세션 관리, 연결된 서드파티 앱 리뷰, 프로필 관리, 아바타 업로드, 회원가입 시 프로필 수집 단계에서의 아바타 업로드, 독립적인 패스키 관리, 패스키 로그인 프롬프트에 대한 사용자 설정 등 다양한 기능이 추가되었습니다.
계 정 센터 프로필 페이지, 회원가입 시 커스텀 프로필 필드, 아바타 업로드 엔드포인트도 이제 개발자 전용 테스트 기능에서 정식 제공으로 바뀌었습니다.
몇 가지 중요한 수정 사항도 반영되었습니다:
- 테마, 플랫폼, 브랜드 색상이 하이드레이션 전에 적용되어 시각적 깜빡임(플래시)이 줄었습니다.
- 단계 상승(스텝 업) 인증이 사용자 권한 인증 기록에 한해 제한적으로 적용됩니다.
- 기존 보안 인증 수단이 없는 사용자는 비밀번호/이메일/전화 인증 없이 소셜 계정 연결이 가능합니다.
- 콘솔에서 사용자 이름 편집 시, 필요한 인증이 완료될 수 있도록 계정 센터로 리디렉션됩니다.
사용자 이름 및 인증 코드 정책
테넌트 수준의 사용자 이름 규칙을 콘솔 > 로그인 경험 > 회원가입 및 로그인 > 고급 옵션 에서 구성할 수 있습니다.
이 정책은 대/소문자 구분 여부, 길이 제한, 허용 문자 유형을 지정할 수 있습니다. 해당 정책은 회원가입, 프로필 작성, 계정 센터, 계정 API, /me 등 엔드 유저의 사용자 이름 쓰기 작업 전체에 일관되게 적용됩니다.
대소문자 구분을 끄는 경우에는 Logto 가 동일한 이름(대소문자만 다른)이 이미 존재하는지를 점검하여 충돌이 있으면 정책 변경을 방지합니다. OIDC 의 preferred_username 클레임은 이제 profile.preferredUsername 이 없는 경우 유저의 username 값을 대신 사용합니다.
인증 코드 정책 또한 콘솔의 보안 설정에서 관리할 수 있으며, 인증 코드의 만료 기간과 최대 재시도 횟수를 설정할 수 있습니다.
더 안전한 메시지 전송
이제 Logto 는 이메일/SMS 인증 및 초대장 발송 경로에 대해 수신자별 시스템 전체 전송 속도제한(레이트 리밋)을 적용합니다. 이 제한은 경험(Experience), MFA, 계정 API, 관리 API, /me, 조직 초대, 레거시 인터랙션 API 등 전체 발송 경로에 적용됩니다.
전송이 제한되면, Logto 는 Message.RateLimited 웹훅 이벤트를 발생시키며, 콘솔 웹훅 설정에서 선택적으로 해당 이벤트를 받을 수 있습니다.
등록이 비활성화된 상태에서 미등록 수신자에게 인증 코드를 보내는 일도 차단하여 계정 유추(Enumeration) 위험을 줄였습니다.
JWT 커스터마이저 및 API 개선 사항
조직 API 리소스 토큰의 경우, 액세스 토큰 JWT 커스터마이저에 타깃 조직의 id, name, description, customData 를 포함한 context.organization 정보가 추가로 제공됩니다.
이로써 모든 토큰에 모든 조직 매핑을 추가할 필요 없이, 조직별 커스텀 클레임을 쉽게 추가할 수 있게 되었습니다.
추가로, 몇 가지 API 개선도 이루어졌습니다:
POST /api/applications/:applicationId/roles엔드포인트가 이드포턴트하게 동작합니다. 기존 역할 ID 는 무시하고, 더 이상422 application.role_exists오류를 반환하지 않습니다.- 이제 해당 엔드포인트는
{ roleIds, addedRoleIds }응답과 함께201코드(생성됨)를 반환하며, 유저 역할 할당 API 와 일관된 형태를 제공합니다. - 조직 역할 생성 시, 초기 스코프 부여 절차가 트랜잭션으로 동작되어, 잘못된 scope ID 가 입력됐을 때 더 이상 부분만 생성되는 일이 없습니다.
보안 및 프로토콜 강화
이번 릴리즈에는 다음과 같이 프로토콜, 보안 관련 개선 사항이 반영되었습니다:
- SAML IdP 자동 제출 폼에서 HTML 속성 값을 이스케이프 처리하고, HTTP(S)가 아닌 액션 URL 을 거부합니다.
samlify라이브러리를^2.13.0으로 업그레이드하여 SAML Assertion 의 XML 이스케이프가 강화되었습니다.- TOTP MFA 인증 시, 동일 시점 혹은 더 이전 타임스텝의 재사용 코드를 거부합니다.
- null 바이트가 포함된 OIDC 요청 바디는 이제
400 invalid_request오류로 응답합니다. - 감사 로그 페이로드에서 null 바이트를 삽입 전에 제거합니다.
- 메일 서브어드레싱 차단 리스트에서 더 이상 사용자 입력을 기반으로 정규표현식을 생성하지 않습니다.
- Logto 터널에서 정적 파일 접근 시, 구성된 경험 경로 외부 파일을 읽지 못하도록 차단합니다.
호환성 및 스토리지 관련 수정도 포함되어 있습니다: Safari 구버전 및 iOS 15 에서 지원되지 않는 정규표현식 lookbehind 로 인한 초기화 크래 시가 수정되었고, 일부 OIDC 엔터프라이즈 커넥터가 JSON-only 네고를 거부하는 공급자에 대해서도 디스커버리 구성을 정상적으로 fetch 할 수 있게 되었습니다. 또한, 커스텀 UI 애셋의 Azure Blob 전송 실패가 스토리지 다운로드 재시도 가능 오류로 제대로 매핑되도록 변경되었습니다.
신규 및 개선된 커넥터
이번 릴리즈에서는 다음과 같이 여러 커넥터 관련 기능이 개선/추가 되었습니다:
- SMTP2GO 이메일 커넥터가 추가되어, SMTP2GO 전송 API 를 통해 인증 메일 발송이 가능합니다.
- QQ 커넥터가 소셜 아이덴티티 검증(스토어된 리디렉션 URI 포함)을 지원합니다.
- SAML 커넥터가 samlify 및 그에 따른 return 타입 엄격화를 반영해 업그레이드 되었습니다.
- 커넥터 킷(Connector Kit)에서 MailJunky 도 사용하는 SMTP 메일박스 파싱/포맷팅 유틸리티가 추가로 export 됩니다.
셀프 호스팅 사용자 안내
v1.41.0 으로 데이터베이스 마이그레이션이 필요합니다. 이번 릴리즈에는 비밀번호 만료, 사용자 이름 정책, 인증 코드 정책, 메시지 레이트 감시 인덱스, 계정 센터 기본값, 서비스 로그 인덱스를 위한 스키마 변경이 포함됩니다.
업그레이드 후에는 새로운 버전을 시작하기 전, 데이터베이스 변경 명령어를 반드시 실행해야 합니다. 자세한 사항은 업그레이드 가이드 를 확인하세요.
CASE_SENSITIVE_USERNAME 환경 변수는 더 이상 권장되지 않습니다. 여전히 런타임 오버라이드로 동작하기는 하지만, 사용자 이름 대소문자 구분은 이제 테넌트별 '사용자 이름 정책'으로 관리해야 합니다. 해당 환경 변수는 차기 메이저 버전에서 제거될 예정입니다.
시작하기
업그레이드할 준비가 되셨나요? 업그레이드 가이드 를 참고하여 단계별 절차를 확인하세요.
자세한 변경 사항은 GitHub 릴리즈 페이지 에서 확인할 수 있습니다.

