-
OAuth란, Google 로그인 기능을 떠올리면 된다.
-
웹 서버에 비밀번호를 제공하지 않고도, 구글 계정의 읿 접근 권한을 부여할 수 있다.
-
실제로 많은 앱에서는 SNS 간편 로그인 기능을 제공한다.
-
안전하지 않은 SNS 로그인 방식을 생각해 보자.
(사용자가 서버에게 구글 아이디와 패스워드를 알려주어야 한다 )
계정정보가 직접적으로 노출된다. -> 사용자가 서비스를 이용하지 않으려고 함
Access Token 이용하기
- 사용자가 설정한 권한에 대해서만 Google 정보에 접근할 수 있도록 하자.
- 바로 Access Token을 이용하는 것이다.
- 사용자에 대한 Access Token 주기
- 사용자 정보 얻기
OAuth 구성 요소
OAuth 동작 예시
JWT (토큰 인증 방식)
- JSON은 데이터를 주고받기 위해 사용하는 경량의 데이터 형식중 하나다.
- JSON 형식에서는 키와 값의 쌍으로 이루어진 데이터 객체를 사용한다.
세션 인증 방식
Token 인증 방식
-
JWT는 인증에 필요한 정보를 암호화한 JSON 형식의 토큰이다.
-
HTTP 헤더에 실어 서버가 클라이언트를 식별할 수 있도록 한다.
-
JWT는 세 가지 구성요소를 가진다.
-
사용자가 인증을 수행하면, 서버는 다음의 정보를 가진 JWT 토큰을 발급한다.
-
Header : 사용할 해시 알고리즘 등의 메타 정보를 포함
-
Payload : 키와 값 형식으로 이루어진 정보의 구성
-
Signature : 정보를 해싱하여 Client에게 함께 전달한다.
xxxxx[header].yyyy[payload].zzzz[signature]
JWT를 이용한 인증
- 나중에 사용자는 자신이 받았던 JWT 토큰을 다시 서버에 전달한다.
- 서버는 정보를 해싱한 값이 사용자로부터 받았던 값과 일치하는지 체크한다.
- 이 과정에서 비밀키를 이용한다.
JWT 인증 원리
- 사용자는 서버가 처음에 부여했던 권한만큼의 작업을 요청할 수 있다.
- 데이터를 변경하면 해시 값이 변경되므로, 악의적인 공격자가 payload를 수정하는 것이 불가능
- 서버의 비밀키를 모르기 때문에 !! 서명값이 일치하지 않아 위조 여부를 알 수 있다.
JWT 방식의 특징
중요한 것은 토큰에는 중요한 정보를 담지 않는 것이 원칙 !!
- JWT의 목적은 정보보호가 아니다.
-> 위조 방지 (인증된 사용자인지를 체크하는 것이지 사용자의 정보를 보호하는게 아니다.)
-> 서버의 메모리 가용 이점(DB조회 필요 없음)