Spring Security
스프링 기반 어플리케이션의 보안(인증과 인가)를 담당하는 스프링의 하위 프레임워크.
보안과 관련되어 체계적으로 많은 옵션을 제공하여 줌으로써 개발자 입장에서 보안 관련 로직을 따로 작성하지 않아도 된다.
JWT
JSON Web Token의 약자로 사용자의 정보를 담아 암호화 한 JSON 객체
기존의 Cookie와 Session는 각각 보안 취약점과 stateless 위반의 문제가 있었지만 JWT는 이를 해역하기 위해 등장했다.
JWT는 암호화 알고리즘을 통해 디지털로 서명되기 때문에 인증되었고, 신뢰할 수 있는 토큰이다.
JWT는 공개키 암호 방식(PKC) 즉 비대칭키 방식이다.
JWT 구조
- Header
서명에 사용할 암호화 알고리즘 관련 정보와 토큰의 유형을 알리는 정보가 담겨있다.
{
"typ": "JWT",
"alg": "HS256"
}
- Payload
클레임(Claims)라는 정보들을 가지고 있다. 클레임은 사용자와 같은 엔티티들이나 추가 정보들의 상태를 뜻한다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
클레임의 종류는 3가지가 있다.
- Registered claim
미리 정의된 클레임 세트. JWT 발급자, 토큰 제목, 토큰 만료 시간, 토큰 활성 날짜, 토큰 발급 시간, JWT 고유 식별자 등, 다양한 정보가 포함되는 클레임이다. - Public claim
사용자가 정의할 수 있는 클레임. 사용자가 직접 정의하기 때문에 이 클레임에서 충돌이 발생할 수도 있다. 따라서 Public 클레임의 이름은 보통 URI로 정의해야 한다. - Private claim
사용자가 정의할 수 있는 클레임. 통신 당사자 간의 정보를 공유하기 위해 만들어진 클레임으로 공개되어도 상관없는 '사용자를 특정할 수 있는' 정보를 담는다.
- Signature
토큰에 포함된 정보들이 통신 과정에서 변경되지 않았다는 것을 검증하는 부분이다.
Signature는 Header와 Payload를 Base64-URL로 인코딩한 문자열들과 Secret Key를 포함해 HMAC SHA256 암호화 알고리즘으로 암호화합니다.
💡 서명(Signature) = 인코딩 헤더 + 인코딩 비밀키 + 비밀 키 + 헤더의 알고리즘
빨간색은 Header, 보라색은 Payload, 파란색은 Signature이다.
참고자료
https://velog.io/@qwe916/Spring-Security-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC
'# Study > Spring' 카테고리의 다른 글
[Spring] @Scheduled로 RefreshToken 블랙리스팅하기 (0) | 2024.11.30 |
---|---|
[Spring] Spring Security + JWT 구현 해보기 (다중 토큰) (2) (0) | 2024.11.27 |
[Spring] Spring Security + JWT 구현 해보기 (다중 토큰) (1) (1) | 2024.11.26 |
[Spring] Spring Security + JWT 구현하기 (단일 토큰) (0) | 2024.11.26 |
[Spring] Spring Security 개념과 작동방식 (0) | 2024.11.16 |