본문으로 건너뛰기

서명 키

Logto OIDC 서명 키, "OIDC 개인 키" 및 "OIDC 쿠키 키"로도 알려진 이 키들은 Logto 로그인 세션에서 JWT 토큰 (액세스 토큰ID 토큰)과 브라우저 쿠키를 서명하는 데 사용됩니다. 이러한 서명 키는 Logto 데이터베이스를 시딩할 때 (오픈 소스) 또는 새 테넌트를 생성할 때 (Cloud) 생성되며, CLI (오픈 소스), Management API 또는 Console UI를 통해 관리할 수 있습니다.

기본적으로 Logto는 타원 곡선 (EC) 알고리즘을 사용하여 디지털 서명을 생성합니다. 그러나 사용자가 JWT 서명을 검증해야 하는 경우가 많고 많은 오래된 도구가 EC 알고리즘을 지원하지 않기 때문에 (RSA만 지원), 개인 키를 회전하고 사용자가 서명 알고리즘 (RSA 및 EC 모두 포함)을 선택할 수 있는 기능을 구현했습니다. 이는 오래된 서명 검증 도구를 사용하는 서비스와의 호환성을 보장합니다.

노트:

이론적으로 서명 키는 유출되지 않아야 하며 만료 시간이 없으므로 회전할 필요가 없습니다. 그러나 일정 기간 후에 서명 키를 주기적으로 회전하면 보안을 강화할 수 있습니다.

작동 방식

  • OIDC 개인 키 Logto 인스턴스를 초기화할 때, 공개 키와 개인 키 쌍이 자동으로 생성되고 기본 OIDC 제공자에 등록됩니다. 따라서 Logto가 새로운 JWT 토큰 (액세스 토큰 또는 ID 토큰)을 발급할 때, 토큰은 개인 키로 서명됩니다. 동시에 JWT 토큰을 수신하는 모든 클라이언트 애플리케이션은 쌍으로 된 공개 키를 사용하여 토큰 서명을 검증할 수 있으며, 이를 통해 토큰이 제3자에 의해 변조되지 않았음을 보장할 수 있습니다. 개인 키는 Logto 서버에서 보호됩니다. 그러나 공개 키는 이름에서 알 수 있듯이 모든 사람에게 공개되며, OIDC 엔드포인트의 /oidc/jwks 인터페이스를 통해 접근할 수 있습니다. 서명 키 알고리즘은 개인 키를 생성할 때 지정할 수 있으며, Logto는 기본적으로 EC (타원 곡선) 알고리즘을 사용합니다. 관리자 사용자는 개인 키를 회전하여 기본 알고리즘을 RSA (Rivest-Shamir-Adleman)로 변경할 수 있습니다.
  • OIDC 쿠키 키 사용자가 로그인 또는 회원가입 흐름을 시작할 때, 서버에 "OIDC 세션"이 생성되며, 브라우저 쿠키 세트도 생성됩니다. 이러한 쿠키를 통해 브라우저는 Logto Experience API에 요청하여 사용자를 대신하여 로그인, 회원가입, 비밀번호 재설정 등의 일련의 상호작용을 수행할 수 있습니다. 그러나 JWT 토큰과 달리, 쿠키는 Logto OIDC 서비스 자체에 의해 서명 및 검증되며, 비대칭 암호화 조치가 필요하지 않습니다. 따라서 쿠키 서명 키에 대한 쌍으로 된 공개 키가 없으며, 비대칭 암호화 알고리즘도 필요하지 않습니다.

Console UI에서 서명 키 회전

Logto는 "서명 키 회전" 기능을 도입하여 테넌트에서 새로운 OIDC 개인 키와 쿠키 키를 생성할 수 있습니다.

  1. Console > 서명 키로 이동합니다. 여기에서 OIDC 개인 키와 OIDC 쿠키 키를 모두 관리할 수 있습니다.

  2. 서명 키를 회전하려면 "개인 키 회전" 또는 "쿠키 키 회전" 버튼을 클릭하세요. 개인 키를 회전할 때 서명 알고리즘을 변경할 수 있는 옵션이 있습니다.

  3. 사용 중인 모든 서명 키가 나열된 표를 찾을 수 있습니다. 참고: 이전 키는 삭제할 수 있지만 현재 키는 삭제할 수 없습니다.

    상태설명
    현재이 키가 현재 애플리케이션 및 API에서 활성 상태로 사용되고 있음을 나타냅니다.
    이전이전에 사용되었지만 회전된 키를 나타냅니다. 이 서명 키로 서명된 기존 토큰은 여전히 유효합니다.

회전은 다음 세 가지 작업을 포함한다는 점을 기억하세요:

  1. 새 서명 키 생성: 모든 애플리케이션API가 새 서명 키를 채택해야 합니다.
  2. 현재 키 회전: 기존 키는 회전 후 "이전"으로 지정되며, 새로 생성된 애플리케이션 및 API에서는 사용되지 않습니다. 그러나 이 키로 서명된 토큰은 여전히 유효합니다.
  3. 이전 키 제거: "이전"으로 표시된 키는 취소되고 테이블에서 제거됩니다.
경고:

서명 키를 연속적으로 (두 번 이상) 회전하지 마세요. 이는 발급된 모든 토큰을 무효화할 수 있습니다.

  • OSS 사용자의 경우, 서명 키를 회전한 후 Logto 인스턴스를 재시작해야 새 서명 키가 적용됩니다.
  • Cloud 사용자의 경우, 서명 키 회전 후 즉시 새 서명 키가 적용되지만, 서명 키를 연속적으로 여러 번 회전하지 않도록 주의하세요.

JWT에서 EC 및 RSA 서명 알고리즘 소개