• iat
  • 발행 시간
  • invalid-iat
  • 유효하지 않은 발행 시간
  • id 토큰

"iat" 토큰 클레임의 중요성 이해 및 "유효하지 않은 발행 시간" 오류 문제 해결하기

이 글에서는 ID 토큰의 "iat" 클레임의 중요성을 탐구하고 "ID 토큰의 유효하지 않은 발행 시간" 오류를 해결하는 방법을 살펴보겠습니다.

Charles
Charles
Developer

"iat" 토큰 클레임의 중요성 이해 및 "유효하지 않은 발행 시간" 오류 문제 해결하기

배경

우리 커뮤니티에서는 가끔씩 "ID 토큰의 유효하지 않은 발행 시간"이라는 난해한 문제에 대한 사용자들의 의견을 듣습니다. 사용자들은 "어제는 잘 작동했는데 오늘은 갑자기 안되네요" 또는 "이 컴퓨터에서는 작동하는데 다른 하나에서는 안됩니다"라고 불평합니다.

이 글에서는 이 문제가 Logto에서 왜 발생하는지 조사하고 해결 방법을 제공하려고 합니다.

소개

OAuth 2.0 및 OpenID Connect (OIDC)에서는 ID 토큰이 사용자 아이덴티티 정보를 안전하게 전송하는 데 중요한 역할을 합니다. ID 토큰의 한 클레임은 "iat" (발행 시간)로, 권한 서버가 ID 토큰을 발행한 타임스탬프를 나타냅니다.

그렇다면 "iat" 클레임은 왜 중요한가요?

  1. 토큰 신선도 및 만료: "iat" 클레임은 ID 토큰의 신선도를 평가하는 중요한 정보를 제공합니다. "iat" 타임스탬프와 현재 시간을 비교하여 의존하는 당사자는 토큰이 최근에 발행되었는지 확인할 수 있습니다. 이 정보는 최신 아이덴티티 정보를 사용해야 하는 애플리케이션에 유용합니다.
  2. 재연 공격 완화: "iat" 클레임은 재연 공격 완화에도 중요한 역할을 합니다. 재연 공격에서는 공격자가 이전에 가로챈 토큰을 재사용하려고 시도합니다. "iat" 클레임은 토큰의 나이에 대한 허용 범위를 설정할 수 있게 하여 이러한 공격을 감지하는 데 도움을 줍니다. 이 범위 밖의 토큰은 유효하지 않은 것으로 간주될 수 있습니다.
  3. 토큰 사용 정책 집행: 애플리케이션은 종종 보안상의 이유로 ID 토큰의 최대 허용 나이에 대한 정책을 부과합니다. "iat" 클레임은 의존하는 당사자가 이러한 정책을 집행할 수 있도록 하여, 스태일 토큰 사용에 관련된 위험을 최소화합니다.
  4. 토큰 취소 지원: 어떤 시나리오에서는 권한 서버가 발행된 토큰을 취소해야 할 수도 있습니다. "iat" 클레임은 언제 토큰이 발행되었는지에 대한 명확한 타임스탬프를 제공하여, 특정 토큰의 발행 시간에 기반한 식별 및 취소를 단순화합니다.

"iat" 클레임 처리에 대한 모범 사례

  • "iat" 클레임 검증: 의존하는 당사자는 "iat" 클레임이 허용 가능한 범위 내에 있는지 항상 검증해야 합니다. 이 범위는 애플리케이션의 특정 보안 요구 사항에 따라 달라질 수 있습니다.
  • 시계 오차 고려: "iat" 타임스탬프와 현재 시간을 비교할 때 일정한 시계 오차를 허용하세요. 시계 오차는 권한 서버와 의존하는 당사자 사이의 잠재적인 시간 차이를 고려합니다.
  • 토큰 만료 정책 설정: "iat" 클레임과 "exp" (만료 시간) 클레임을 함께 사용하여 포괄적인 토큰 사용 정책을 집행하고, 애플리케이션의 전체적인 보안 태세를 강화하세요.

문제 해결

이제 악명 높은 "유효하지 않은 발행 시간" 오류의 근본 원인이 거의 명확해졌습니다.

재연 공격을 완화하고 시계 오차를 고려하기 위해 Logto는 ID 토큰에 대해 60초의 허용 범위를 설정했습니다. 시대가 월드 시간과 60초 이상 차이가 나는 모든 의존 당사자는 잠재적으로 위험하다고 간주되며 ID 토큰 검증에 실패하게 됩니다. 따라서 "유효하지 않은 발행 시간" 오류가 발생합니다.

그러나 실제로는 시계 오차가 발생합니다. 컴퓨터가 월드 시간 서버에 연결하여 컴퓨터 시간을 동기화하지 못할 때가 있습니다. 가끔은 권한 서버가 동기화되지 않을 수도 있습니다. 심지어 더 나쁜 경우에는 양쪽이 모두 동기화되지 않을 수 있습니다.

게다가 SSO 시나리오에서는 다양한 클라이언트와 SSO 공급자 간의 시간 차이가 더 클 수도 있습니다.

해결책

고통을 완화하고 안전 조치를 고려하여 Logto는 지금 비-SSO 인증에 대해 iat 허용 범위를 60초에서 5분, SSO 시나리오에 대해서는 10분으로 늘렸습니다.

한편, 이 유용한 도구 사이트(https://time.is)를 사용하여 컴퓨터 시간이 월드와 동기화되었는지 확인할 수 있습니다. 시간을 수동으로 동기화하거나 다른 시간 서버로 변경하여 시간 차이가 항상 허용 범위 내에 있도록 하세요.

결론

ID 토큰의 "iat" 클레임은 현대 애플리케이션에서 아이덴티티 및 액세스 관리의 보안을 향상시키는 데 중요한 요소입니다. "iat" 클레임을 처리하기 위한 모범 사례를 포함함으로써 강력하고 안전한 아이덴티티 인증 프로세스를 보장할 수 있습니다.

또한 컴퓨터 시간이 항상 월드 시간 서버와 동기화되도록 하세요.