μ›Ή 인증

hellonayeonΒ·2021λ…„ 11μ›” 9일
0

인증이 ν•„μš”ν•œ 이유

HTTP ν”„λ‘œν† μ½œμ€ λΉ„μ—°κ²°(connectionless) λ¬΄μƒνƒœ(stateless) νŠΉμ§•μ„ κ°€μ§€λ―€λ‘œ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 이전 μš”μ²­λ“€μ„ κΈ°μ–΅ν•˜μ§€ μ•ŠμœΌλ©°, 이후에 μ˜€λŠ” μš”μ²­λ“€μ„ 각각 λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€. λ”°λΌμ„œ μ‚¬μš©μž 인증을 ν•˜κ³  λ‚œ 이후에 λ‹€λ₯Έ μš”μ²­λ“€μ„ 보내더라도 μ„œλ²„λŠ” ν•΄λ‹Ή μš”μ²­μ΄ 인증 된 μ‚¬μš©μžλ‘œλΆ€ν„° 온 것인지 μ•Œ 길이 μ—†λ‹€. μ΄λŸ¬ν•œ HTTP ν”„λ‘œν† μ½œμ˜ νŠΉμ„±μ„ λ³΄μ™„ν•˜κΈ°μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” 맀 μš”μ²­λ§ˆλ‹€ μžμ‹ μ΄ λ‘œκ·ΈμΈμ„ μˆ˜ν–‰ν–ˆκ³  μžμ›μ„ μ‚¬μš©ν•  κΆŒλ¦¬κ°€ μžˆλŠ” μ‚¬μš©μžμž„μ„ μ„œλ²„μΈ‘μ— ν™•μΈμ‹œμΌœμ€˜μ•Όν•œλ‹€. κ·Έλž˜μ„œ μš”μ²­λ§ˆλ‹€ μ‚¬μš©μžμ— λŒ€ν•œ 인증이 μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•˜λ‹€.

인증 방식

μ›Ή 인증 방식을 검색해보면 Cookie와 Session을 λΉ„κ΅ν•˜λŠ” 글이 λ§Žλ‹€. μ²˜μŒμ— λ‚˜λŠ” μ™œ 이 λ‘˜μ„ 비ꡐ해야 ν•˜λŠ”μ§€ λͺ°λžλ‹€. μ„œλ²„ μͺ½μ— μ‚¬μš©μž 인증 정보λ₯Ό μ €μž₯ν•˜λŠ” Session λ°©μ‹μ˜ 인증도 κ²°κ΅­ ν΄λΌμ΄μ–ΈνŠΈ μͺ½μ—μ„œ μžμ‹ μ΄ λˆ„κ΅¬μΈμ§€ μ²˜μŒμ— μ„œλ²„λ‘œλΆ€ν„° λ°œκΈ‰λ°›μ€ SESSIONIDλ₯Ό μ €μž₯ν•˜κ³  이후 μš”μ²­λ§ˆλ‹€ 보내기 μœ„ν•΄ Cookieλ₯Ό μ‚¬μš©ν•˜λŠ”λ° 말이닀. κ·Έλž˜μ„œ νŠœν„°λ‹˜κ»˜ μ§ˆλ¬Έν–ˆλŠ”λ° κ³Όκ±°μ—λŠ” Cookie만 μ‚¬μš©ν•˜λŠ” 인증 방식을 μ‚¬μš©ν–ˆλ‹€κ³  ν•œλ‹€πŸ€­ μ‚¬μš©μžλŠ” μ„œλ²„λ‘œ λΆ€ν„° 만료일 이름 κ°’ 경둜 정보가 λ‹΄κΈ΄ 데이터λ₯Ό λ°›μ•„ λΈŒλΌμš°μ €μ˜ Cookie 에 μ €μž₯해놓고 이후 μš”μ²­λ§ˆλ‹€ μš”μ²­ 헀더에 Cookie 값을 μ‚½μž…ν•΄μ„œ 보낸닀.

Session

Session은 μ„œλ²„μΈ‘μ—μ„œ μ‚¬μš©μžμ™€μ˜ 연결을 κ΄€λ¦¬ν•˜λŠ” 방식이닀. μ‚¬μš©μžμ˜ 인증 절차λ₯Ό 거치면 μ„œλ²„μΈ‘μ—μ„œλŠ” SESSIONID 값을 μƒμ„±ν•΄μ„œ μ‚¬μš©μž 정보와 맀핑될 수 μžˆλ„λ‘ μ„œλ²„μƒμ˜ λ©”λͺ¨λ¦¬μ— SESSIONIDλ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•œλ‹€. μƒμ„±ν•œ SESSIONIDλ₯Ό μ‚¬μš©μžμ—κ²Œ 보내면, μ‚¬μš©μžλŠ” SESSIONIDλ₯Ό Cookie에 μ €μž₯해놓고 Cookie 인증 방식과 λ§ˆμ°¬κ°€μ§€λ‘œ μš”μ²­κ³Ό ν•¨κ»˜ Cookie 값을 μš”μ²­ 헀더에 보낸닀.

JWT

JWTλŠ” μ•”ν˜Έν™” 토큰 기반 인증 방식이닀. μ„œλ²„λŠ” μ‚¬μš©μž 정보λ₯Ό 기반으둜 JSON ν˜•μ‹μ˜ 데이터λ₯Ό μƒμ„±ν•˜κ³  이λ₯Ό μ•”ν˜Έν™”ν•΄μ„œ μ‚¬μš©μž 츑에 μ „λ‹¬ν•œλ‹€. 전달받은 λ‚΄μš©μ€ λΈŒλΌμš°μ €μ˜ Local Storage에 μ €μž₯ν•˜κ³  μ‚¬μš©μž 인증이 ν•„μš”ν•¨μ— 따라 μš”μ²­ ν—€λ”μ˜ Authorization 값에 λ„£μ–΄μ„œ 전달할 수 μžˆλ‹€.

OAuth

OAuthλŠ” μ‚¬μš©μž 인증을 λ‹€λ₯Έ μ„œλΉ„μŠ€λ‘œ μœ„μž„ν•˜λ„λ‘ ν•˜λŠ” ν”„λ‘œν† μ½œμ΄λ‹€. 자체 μ„œλΉ„μŠ€μ—μ„œ 직접 μ‚¬μš©μž 인증 과정을 κ±°μΉ˜μ§€ μ•Šκ³  λ‹€λ₯Έ μ›Ή μ„œλΉ„μŠ€μ— λ“±λ‘λœ μ‚¬μš©μž 정보λ₯Ό μ‚¬μš©ν•˜λŠ” 방식이닀. μ•žμ„œ μ •λ¦¬ν–ˆλ˜ Cookie Session JWT λ°©μ‹μ—μ„œλŠ” μ‚¬μš©μžκ°€ μ„œλ²„μͺ½μœΌλ‘œ 인증을 μš”μ²­ν–ˆμ§€λ§Œ, 이와 λ‹€λ₯΄κ²Œ 인증을 μš”μ²­ν•˜λŠ” μ£Όμ²΄λŠ” 우리의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ λœλ‹€. μ‚¬μš©μžκ°€ 인증 μš”μ²­μ„ 보내면 μ„œλ²„λŠ” 이λ₯Ό 우리의 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ μ•„λ‹Œ λ‹€λ₯Έ 인증 μ„œλ²„μΈ 제 3의 μ›Ή μ„œλ²„μΈ Authorization Sever둜 μ „λ‹¬ν•΄μ„œ 인가λ₯Ό 확인받고 Access Token을 λ°œκΈ‰ λ°›λŠ”λ‹€. 이후 우리의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•˜κ³  싢은 μ‚¬μš©μž 정보와 κ΄€λ ¨λœ μžμ›μ„ 가지고 μžˆλŠ” μ„œλ²„μΈ Resource Sever둜 Access Token을 보내어 인증 ν›„ μžμ›μ„ νšλ“ν•˜κ²Œ λœλ‹€.

정리


πŸ“ μš©μ–΄ 정리

  • Β  Authentication Β 
    μ‚¬μš©μžμ˜ 신원을 ν™•μΈν•˜λŠ” ν–‰μœ„

  • Β  Authorization Β 
    μ‚¬μš©μžμ˜ κΆŒν•œμ„ ν™•μΈν•˜λŠ” ν–‰μœ„

  • Β  Cookie Β 
    λΈŒλΌμš°μ € μ €μž₯μ†Œ

  • Β  Session Β 
    ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ μ—°κ²° λ‹¨μœ„
    |__ 일정 μ‹œκ°„λ™μ•ˆ 같은 ν΄λΌμ΄μ–ΈνŠΈλ‘œ λΆ€ν„° λ“€μ–΄μ˜€λŠ” 일련의 μš”κ΅¬λ₯Ό ν•˜λ‚˜μ˜ μƒνƒœλ‘œ 보고 κ·Έ μƒνƒœλ₯Ό μΌμ •ν•˜κ²Œ μœ μ§€μ‹œν‚€λŠ” 기술

  • Β  JWT Β 
    μ›Ή μ‚¬μš©μž 인증을 μœ„ν•œ μ•”ν˜Έν™”λœ JSON ν˜•μ‹μ˜ 토큰

  • Β  OAuth Β 
    μ‚¬μš©μž 인증을 λ‹€λ₯Έ μ„œλΉ„μŠ€λ‘œ μœ„μž„ν•˜κΈ° μœ„ν•œ ν”„λ‘œν† μ½œ


πŸ”– 인증 방식 비ꡐ



μ°Έκ³ λ¬Έμ„œ

πŸ“Œ shaking shaking. "Session μ΄λž€?", shaking blog.

πŸ“Œ RyanGomdoriPooh. "쿠킀와 μ„Έμ…˜ κ°œλ…", Ryan Server, 11 Oct. 2021.

πŸ“Œ CHELSEA. "[λ„€νŠΈμ›Œν¬] HTTP Cookie vs Session", chelsea.log, 18 May. 2020.

πŸ“Œ Bizagi. "OAuth authentication"

πŸ“Œ amuse. "[OAuth] 무엇인가", 14 Jan. 2021.

πŸ“Œ thinking2. "OAUTH 2.0 λŒ€ν‘œ 취약점과 λ³΄μ•ˆ 고렀사항", Flatinum, 25 Nov. 2019.

πŸ“Œ MOONGCHI. "OAuth2의 λ³΄μ•ˆμ·¨μ•½μ κ³Ό 해결방법", λ‹€μ–‘ν•œ 사고가 μžˆλŠ” κ³³, 03 Nov. 2019.

0개의 λŒ“κΈ€