JWT에 관해 아는만큼 설명해주세요.
"JWT(JSON Web Token)는 인증과 정보 교환을 위해 설계된 웹 표준입니다. 이 토큰을 사용함으로써, 두 당사자 간에 정보를 안전하게 전송할 수 있습니다. 특히, JWT는 자가 수용적인 특성을 가지고 있어, 토큰 자체가 검증에 필요한 모든 정보를 포함하고 있습니다. 이는 시스템 간의 통신을 단순화하고, 별도의 저장소가 없어도 인증 정보를 안전하게 교환할 수 있게 해줍니다.
JWT는 세 부분으로 구성됩니다: Header, Payload, 그리고 Signature. Header에는 토큰의 타입과 사용된 암호화 알고리즘이 명시됩니다. Payload에는 토큰에 담길 정보, 즉 클레임이 포함되며, 이는 사용자 식별 정보나 유효 기간 같은 데이터를 포함할 수 있습니다. 마지막으로 Signature는 토큰이 정당하게 생성된 것임을 보증하기 위해 Header와 Payload를 암호화 알고리즘과 비밀키 혹은 공개/비공개 키 쌍을 사용하여 서명한 것입니다.
JWT의 사용은 웹 또는 모바일 애플리케이션에서 사용자 인증을 간소화하는데 큰 이점을 제공합니다. 예를 들어, 사용자가 로그인을 할 때, 서버는 사용자의 인증 정보를 검증한 후, JWT를 생성하여 반환합니다. 사용자는 이후의 요청에서 이 토큰을 사용하여 자신을 인증할 수 있으며, 서버는 토큰의 서명을 검증하여 요청이 유효한지 판단합니다.
결론적으로, JWT는 안전하고 유연한 인증 메커니즘을 제공하여, 현대의 분산된 시스템 환경에서 간편하게 사용자 인증을 처리할 수 있는 방법입니다."
꼬리 질문 > JWT의 Header에는 주로 어떤 정보가 포함되나요?
"Header에는 주로 토큰의 타입, 즉 "JWT"와 사용된 서명 알고리즘, 예를 들어 "HS256" 또는 "RS256" 같은 해시 알고리즘 정보가 포함됩니다. 이 정보는 토큰을 처리할 때 어떻게 검증해야 하는지를 명시합니다."
꼬리 질문 > Payload 부분에는 어떤 정보가 담길 수 있나요?
"Payload에는 클레임(claim)이라고 불리는 데이터 조각들이 포함됩니다. 이 클레임들에는 사용자의 식별 정보, 토큰의 발행자, 유효 기간, 주제 등과 같은 다양한 정보가 담길 수 있습니다. 클레임은 세 가지 유형으로 나뉩니다: 등록된(Registered), 공개(Public), 그리고 비공개(Private) 클레임입니다."
꼬리 질문 > Signature 부분은 어떤 역할을 하나요?
"Signature 부분은 토큰의 무결성과 인증을 보증합니다. Header와 Payload를 합친 뒤, 제공된 비밀키 또는 공개/비공개 키 쌍을 사용해 암호화합니다. 이 서명을 통해 토큰이 중간에 변경되지 않았음을 검증할 수 있습니다."
꼬리 질문 > JWT는 어떻게 사용자 인증에 사용되나요?
"사용자가 로그인을 하면, 서버는 사용자의 인증 정보를 검증한 후 JWT를 생성하여 사용자에게 반환합니다. 사용자는 이후의 요청에 이 토큰을 포함시켜 서버에 보내고, 서버는 토큰의 유효성과 서명을 검증하여 사용자를 인증합니다."
꼬리 질문 > JWT의 유효 기간은 어떻게 관리하나요?
"JWT의 Payload 부분에는 `exp`(expiration time) 클레임을 통해 토큰의 유효 기간을 명시할 수 있습니다. 서버는 토큰 검증 시 `exp` 클레임을 확인하여, 현재 시간이 토큰의 유효 기간 내에 있는지를 판단합니다."
꼬리 질문 > 비대칭 암호화와 대칭 암호화 중 JWT에서 주로 사용되는 방식은 무엇인가요?
"JWT는 두 가지 방식 모두를 지원합니다. 단순하고 효율적인 인증이 필요한 경우에는 대칭 암호화(HS256)가, 보안 수준이 더 높은 환경에서는 비대칭 암호화(RS256)가 사용됩니다."
꼬리 질문 > JWT의 보안 취약점에는 어떤 것들이 있나요?
"JWT는 주로 토큰의 노출이나 남용에 취약합니다. 따라서, HTTPS를 통한 안전한 통신, 토큰의 짧은 유효 기간 설정, 적절한 저장 방식 선택 등의 보안 조치가 필요합니다."
꼬리 질문 > 만약 토큰이 탈취당했다면 어떻게 대처해야 하나요?
"토큰이 탈취당했다고 의심되는 경우, 즉시 해당 토큰을 무효화해야 합니다. 이를 위해 서버 측에서는 토큰의 블랙리스트를 관리하거나, 변경된 사용자 인증 정보로 새로운 토큰을 발급하여 대체하는 방법이 있습니다."
꼬리 질문 > JWT와 OAuth의 차이점은 무엇인가요?
"JWT는 토큰을 생성하고 검증하는 방법에 대한 표준입니다. 반면, OAuth는 사용자 인증 및 권한 부여를 위한 프레임워크로, JWT를 포함한 다양한 토큰 포맷을 사용할 수 있습니다. 간단히 말해, JWT는 토큰의 형식을, OAuth는 인증 및 권한 부여의 프로세스를 정의합니다."
꼬리 질문 > JWT 토큰을 안전하게 저장하는 방법은 무엇인가요?
"웹 애플리케이션에서는 JWT를 HTTPOnly와 Secure 플래그가 설정된 쿠키에 저장하는 것이 좋습니다. 이는 XSS 공격으로부터 토큰을 보호할 수 있습니다. 모바일 애플리케이션의 경우, 안전한 저장소 옵션을 사용해야 합니다."
'면접 (Java) > 기술면접' 카테고리의 다른 글
[면접] 기술 면접 - Redis (0) | 2024.03.22 |
---|---|
[면접] 기술 면접 - Docker (2) | 2024.03.22 |
[면접] 기술 면접 - 모놀리식 vs 마이크로서비스 아키텍처 (0) | 2024.03.21 |
[면접] 기술 면접 - 프로세스 vs 쓰레드 (0) | 2024.03.21 |
[면접] 기술 면접 - 데이터 정규화, ERD (0) | 2024.03.19 |