2023. 11. 10. 20:52ㆍSpringboot
0. 인증과 인가란?
인증과 인가
인증 : 식별자의 식별 가능한 정보(이름, 이메일)를 통해 유저의 신원을 확인하는 것
로그인을 통해 해당 사용자가 db에 저장되어 있는지 확인
인가 : 사용자의 권한에 따른 리소스 전달을 허가 확인하는 것
우리는 이를 통해 다른 사람의 todo글을 수정, 삭제를 불가능하게 만들 것
로그인을 할때(인증) 로그인을 한 후, 비회원과 회원 여부에 따라 권한을 다르게 부여
인증 방식 :
1. 세션 저장소 // springboot 회원가입
해당 방법은 spring boot의 default로 사용하는 spring security방법
시큐리티는 spring boot의 dispatcherServlet보다 앞단에 있는 filter로 해당 로그인이 이루어지면
dispatcherServlet보다 빠르게 가로채서 spring security에서 인증방식을 실행해야 한다.
[출처] : https://k3068.tistory.com/88
2. jwt // 이번에 만들어볼 회원가입
[출처]: https://mangkyu.tistory.com/56
JWT란?
JWT(Json Web Token)란 Json 포맷을 이용하여
사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.
JWT는 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.
주로 회원 인증이나 정보 전달에 사용되는 JWT는 아래의 로직을 따라서 처리된다.
JWT의 구성요소
JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있으며,
아래와 같은 형태로 구성되어 있다.
jwt 구조
[출처] : https://velopert.com/2389
Header / Payload / Signature
Header : 토큰의 헤더는 토큰의 유형(typ), Signature를 해싱하기 위한
알고리즘(alg)을 지정하는 두 가지 정보로 구성되어 있다.
typ: 토큰의 타입을 지정 ex) JWT
alg: 알고리즘 방식을 지정하며, 서명(Signature) 및 토큰 검증에 사용
ex) HS256(SHA256) 또는 RSA
{
"alg": "HS256",
"typ": "JWT"
}
Payload : 토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클레임이 담겨 있다.
비공개 클레임 : 토큰 발급자와 수신자 간의 비공개 정보(username, role)
공개 클레임 : 공개용 정보를 나타내는 클레임
등록된 클레임 : 토큰에 대한 정보(만료일, 발급일)
iss: 토큰 발급자(issuer)
sub: 토큰 제목(subject)
aud: 토큰 대상자(audience)
exp: 토큰 만료 시간(expiration),
NumericDate 형식으로 되어 있어야 함 ex) 1480849147370
nbf: 토큰 활성 날짜(not before), 이 날이 지나기 전의 토큰은 활성화되지 않음
iat: 토큰 발급 시간(issued at), 토큰 발급 이후의 경과 시간을 알 수 있음
jti: JWT 토큰 식별자(JWT ID), 중복 방지를 위해 사용하며,
일회용 토큰(Access Token) 등에 사용
Signature :
해당 토큰이 조작, 변경되지 않았음을 검증할 때 사용하는 고유한 암호 코드입니다.
서명은 header와 payload를 인코딩하고 인코딩한 비밀 키를 이용해 header에서
정의한 알고리즘으로 해싱하여 이 값을 다시 base64Url로 인코딩하여 생성합니다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
'Springboot' 카테고리의 다른 글
Spring boot 중복된 Bean 에러 (0) | 2023.11.30 |
---|---|
Spring HTTP 요청과 응답 (0) | 2023.11.13 |
스프링 유저 프로필 사진 (5) | 2023.11.09 |
스프링 이미지 업로드(2) (0) | 2023.11.07 |
스프링 메모장 (1) | 2023.11.01 |