❓What Is Token
토큰은 리소스로 돌아갈 때마다 인증을 다시 받을 필요 없이 앱에 액세스할 수 있는 티켓과 같습니다.
👉토큰이 유효하다면 사용자는 계속해서 액세스 할 수 있습니다.
❌웹 종료 시 토큰은 자동적으로 소멸하게 됩니다.
❓Token기반 인증
👉토큰 기반 인증에 대해 공부하기 전에 인증과 인가에 대한 개념이 필요합니다.
🔥인증
사용자의 신원을 검증하는 행위로써 보안 프로세서에서 첫 번째 단계입니다.
👉선택한 인증 요건과 관련하여 적합한 자격 증명을 입력하는 직원에게 기업 시스템에 대한 액세스를 허용합니다
💧인가
사용자에게 특정 리소스나 기능에 액세스 할 수 있는 권한을 부여하는 프로세스를 말합니다.
👉부서별 파일에 액세스 할 수 있는 권한을 부여하고, 필요할 경우 금융 정보 등의 기밀 데이터에 대한 액세스 권한도 갖습니다. 직원은 업무 수행에 필요한 파일에도 액세스할 수 있어야 합니다.
token이 나오기 전에는 비밀번호와 서버로 사용자를 인증하였습니다.
❗하지만 이로 인해 비밀번호가 분실되거나 유출될 경우 보안상의 문제가 심해졌습니다.
👉그로 인해 access token을 통해 유저의 권한을 확인해 권한이 있는 유저인가를 확인하는 방식으로 인증 방식이 나오게 되었습니다.
⛄Three types of Authentication Tokens
모든 Token은 액세스를 허용하지만 각 유형마다 약간의 차이가 존재합니다.
📌Attached
(연결형)
물리적 장치가 시스템에 연결되어 액세스를 허용합니다
🔎스마트카드, USB Device
📌Contactless
(비 접촉형)
물리적인 통신은 필요 없지만 거리가 충분히 가까워야 시스템에 연결되어 액세스를 허용합니다
🔎token ring
📌Detachable
(분리형)
다른 디바이스와 접촉하지 않고도 먼 거리에서 서버와 통신할 수 있습니다
🔎이중 요소 인증
🧱 4 Step Token Authentication Process
Token기반 인증 방식은 사용자가 한번 인증되면 정해진 시간 동안 토큰이 할당되어 토큰을 사용한 액세스가 가능합니다.
Token 기반 인증 방식의 프로세스는 다음과 같습니다.
👉요청 ➡ 확인 ➡ 토큰 ➡ 저장
⚓요청
클라이언트가 서버에 대한 액세스를 요청합니다.
⚓확인
서버가 해당 사용자의 엑세스 여부를 확인합니다.
⚓토큰
확인을 마치면 서버가 토큰을 발급하여 클라이언트에게 전달합니다.
⚓저장
작업이 진행되는 동안 토큰을 클라이언트의 브라우저에 저장됩니다.
🎮JSON Web Token (JWT)
👉시스템에 액세스 하는 사용자가 증가함에 따라 안전한 인증 방법이 필요해졌습니다.
JWT는 개방형 표준입니다. 데이터는 디지털 서명을 통해 확인하며, HTTP를 통해 전송되는 경우에는 데이터를암호화하여 안전하게 보호합니다.
📍JWT의 종류
JWT는 보통 다음과 같은 두 가지 종류의 토큰을 이용해 인증을 구현합니다.
🔎액세스 토큰(Access Token)
보호된 정보들에 접근할 수 있는 권한 부여에 사용합니다
👉사용자가 사용하는 토큰은 엑세스 토큰입니다
🔎리프레시 토큰(Refresh Token)
엑세스 토큰의 유효기간이 만료된다면 리프레시 토큰을 사용하여 새로운 엑세스 토큰을 발급받습니다.
👉사용자는 만료된 액세스 토큰을 다시 발급받기 위해 인증을 다시 받을 필요가 없음
📍JWT의 구성요소
JWT는 위 그림과 같이.으로 나누어진 세 부분이 존재하며 각각을 Header, Payload, Signature라고 부릅니다.
🔎헤더
이것이 어떤 종류의 토큰인지 어떤 알고리즘으로암호화할지가 적혀 있습니다.
/*header*/
{
"alg": "HS256"
"typ": "JWT"
}
🔎페이로드
서버에서 활용할 수 있는 유저의 정보가 담겨 있습니다.
/*payload*/
{
"sub": "someinformation",
"name": "phillip",
"iat": "151623391"
}
🔎암호화
서버의 비밀 키와 헤더에서 지정한 알고리즘을 사용하여 해싱합니다.
❓해싱이란❓
가장 많이 사용하는 암호화 방식 중 하나로 해시 함수를 사용하여 암호화를 진행하는데 특징은 다음과 같습니다.
👉항상 같은 길이의 문자열을 리턴합니다.
👉서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결괏값이 나옵니다.
👉동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결괏값이 나옵니다.
🔎예시
‘password’‘5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8’
‘Password’‘8BE3C943B1609FFFBFC51AAD666D0A04ADF83C9D'
‘kimcoding’‘61D17C8312E8BC24D126BE182BC674704F954C5A’
/*signature*/
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret)
⚡Advantages of JWT
JWT는 다음과 같은 장점이 있습니다.
🔎작은 크기
JSON 코드 언어로 생성된 토큰은 용량이 적기 때문에 매우 빠르게 전달됩니다.
🔎용이성
거의 모든 곳에서 토큰이 생성될 수 있으며, 서버에서 토큰을 확인할 필요가 없습니다.
🔎제어
액세스 가능한 데이터, 권한 지속 시간, 로그인 시 가능한 작업을 지정할 수 있습니다.
☔Disadvantages of JWT
반면에 다음과 같은 단점들이 존재합니다.
🔍단일 키
JWT는 단일 키를 이용합니다. 따라서 키가 유출되면 시스템 전체가 위험에 노출됩니다.
🔍복잡성
개념을 이해하기가 어렵기 때문에 사용하기 쉽지가 않습니다. 개발자가 암호 인증 알고리즘에 전문가가 아니라면 자신도 모르게 시스템을 위험에 빠뜨릴 수 있습니다.
🔍제한
메시지를 모든 클라이언트에게 푸시할 수 없고, 서버 측 클라이언트도 관리할 수 없습니다
728x90
반응형
'백엔드 > 네트워크' 카테고리의 다른 글
[HTTP]Axios (0) | 2023.01.04 |
---|---|
[네트워크] Json-server 사용하기 (0) | 2023.01.04 |
[인증/보안]Session (0) | 2022.11.18 |
[네트워크]HTTP (0) | 2022.11.12 |
[네트워크]계층 모델 (2) | 2022.11.12 |