삼삼고
꿈꾸는 삼삼고
삼삼고
전체 방문자
오늘
어제
  • 분류 전체보기 (179)
    • 후기 (95)
      • 코딩부트캠프 (90)
      • 취업 준비 기간 (5)
    • 백엔드 (20)
      • django (1)
      • 네트워크 (13)
      • 익스프레스 (0)
      • 그래프QL (2)
      • sqlite3 (1)
    • 프론트 엔드 (49)
      • javascript (21)
      • css (6)
      • react (8)
      • HTML (5)
      • UI&UX (8)
    • experience (1)
    • python (1)
    • project (1)
    • CS (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • http://www.tcpschool.com/ajax/ajax_basic_node
  • 출처
  • django 첫걸음
  • 코드스테이츠 세션 후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
삼삼고

꿈꾸는 삼삼고

[인증/보안]Token
백엔드/네트워크

[인증/보안]Token

2022. 11. 22. 23:49

 

❓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기반 인증 방식은 사용자가 한번 인증되면 정해진 시간 동안 토큰이 할당되어 토큰을 사용한 액세스가 가능합니다.

출처 :https://www.okta.com/kr/identity-101/what-is-token-based-authentication/

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
    '백엔드/네트워크' 카테고리의 다른 글
    • [HTTP]Axios
    • [네트워크] Json-server 사용하기
    • [인증/보안]Session
    • [네트워크]HTTP
    삼삼고
    삼삼고
    별이 되겠습니다

    티스토리툴바