Session 23. Authentication/Authorization2

๊น€๋ฏผ์žฌยท2021๋…„ 10์›” 9์ผ
0

TIL, WeCode, Courseย 

๋ชฉ๋ก ๋ณด๊ธฐ
42/48
post-thumbnail

*๐Ÿ”Study Keyword :

  • ํšŒ์›๊ฐ€์ž…์‹œ 1> ๐Ÿ”‘๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•”ํ˜ธํ™”๋œ(hashed) ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ 2> ๐Ÿ”‘JWT๋ฅผ ๋ฐœํ–‰ํ•ด http response๋ฅผ ํ†ตํ•ด ํ”„๋ก ํŠธ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹
  • 3> ๐Ÿ”‘Http request์—์„œ JWT๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ์ง์ ‘ ํ•ด๋ณด์ขŒ์•„~

1. ์ธ์ฆ(Authentication)

  • WHAT ISโ“
  • Authentication์€ ์œ ์ €์˜ identification, ์ฆ‰ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ์ด๋‹ค.
  • ์ด๋ฅผ ํ’€์–ด์„œ ๋งํ•˜๋ฉด ์œ ์ €์˜ ์•„์ด๋””์™€ ๋น„๋ฒˆ์„ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋งํ•œ๋‹ค.
  • Authentication ์ ˆ์ฐจ
  1. ์œ ์ €๊ฐ€ ํšŒ์›๊ฐ€์ž…์„ ํ†ตํ•ด ์•„์ด๋””์™€ ๋น„๋ฒˆ์„ ๋งŒ๋“ ๋‹ค.
  2. ์œ ์ €์˜ ๋น„๋ฐ€ ๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ DB์— ์ €์žฅํ•œ๋‹ค.
  3. ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ ํšŒ์›๊ฐ€์ž…ํ–ˆ๋˜ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  4. ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 1>์•”ํ˜ธํ™”๐Ÿ”‘ ํ›„ ์•”ํ˜ธํ™”๋˜์„œ DB์— ์ €์ •๋œ ์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๊ตํ•œ๋‹ค.
    => ์ธ์ฆ
  5. ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋กœ๊ทธ์ธ ์„ฑ๊ณต์„ ์•Œ๋ ค์ฃผ๊ณ ย 2>access token๐Ÿ”‘์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•œ๋‹ค.
  6. ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•œ ์œ ์ €๋Š” ๋‹ค์Œ๋ถ€ํ„ฐย access token๐Ÿ”‘์„ ์ฒจ๋ถ€ํ•ด request๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•จ์œผ๋กœ์„œ ๋งค๋ฒˆ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    => ์ธ๊ฐ€

1_1. ์•”ํ˜ธํ™”์˜ ๊ณผ์ •

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ ์‹œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ๋ณต์›ํ•  ์ˆ˜ ์—†๋„๋กํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋•Œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜๊ฐ€ ์“ฐ์ธ๋‹ค.

- ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ?

  • ํ•ด์‰ฌ๋ž€ input์„ ๋„ฃ์œผ๋ฉด ํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค์„œ ์•Œ ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ์˜ output์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ๋Š” output์œผ๋กœ input์„ ์œ ์ถ”ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ฆ‰, ๋ณตํ˜ธํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
  • ๋ณต์›์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์•”ํ˜ธํ™”์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • MD5, SHA-A์™€ SHA-256 ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.
    -EX> ๋น„๋ฐ€๋ฒˆํ˜ธ '1234'๋ฅผ SHA-256์œผ๋กœ ํ•ด์‹ฑํ•œ ๊ฒฐ๊ณผ๋งŒ์„ ๊ฐ€์ง€๊ณ ๋Š” ์‹๋ณ„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    -ํ•˜์ง€๋งŒ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ '1234'๋ฅผ ๋‹ค์‹œ ํ•ด์‹ฑํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋˜์–ด salting๊ณผ key stretching ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ—ˆ์ ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋‹ค.

- Salting & KeyStretching?

  • Salting์€ ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ด์™ธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋žœ๋ค ๋ฐ์ดํ„ฐ(์ž„์˜ ๋ฌธ์ž์—ด)๋ฅผ ๋”ํ•ด์„œ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•˜๊ณ 
  • Key Stretching์€ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ๊ฐ’์„ ๊ณ„์‚ฐ ํ•œ ํ›„ ๊ทธ ํ•ด์‰ฌ๊ฐ’์„ ๋˜ ํ•ด์‰ฌ ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ์ฆ‰, Salting KeyStretching์€ ํ•œ ๋ฒˆ ๊ผฌ์•„์„œ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋Š” ๋ชฉ์ ์„ ์œ„ํ•ด ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์— ์ž„์˜๋กœ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด (=Salt)์„ ํ•ฉ์ณ์„œ ํ•ด์‹ฑํ•˜์—ฌ ํ•ด์‹œ๊ฐ’์„ ์ €์žฅํ•œ ๋’ค salt + hash๋ฅผ ๋ฌดํ•œ์ •์œผ๋กœ ๋Š˜๋ฆฌ๋Š”(key Stretching) ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ๋œ๋‹ค.

- bcrypt

  • Salting๊ณผ Key Stretching์„ ๊ตฌํ˜„ํ•œ ํ•ด์‰ฌ ํ•จ์ˆ˜์ค‘ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ bcrypt
  • bcrypt๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์ด์ „ ํ•ด์‰ฌํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ณผ์ •์€ 1. ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ํ›„ 2. Salting๊ณผ ํ•ด์‹œ๊ฐ’, Key stretching์˜ ๋ฐ˜๋ณตํšŸ์ˆ˜๋ฅผ ๊ฐ™์ด ๋ณด๊ด€ํ•œ๋‹ค.

2. Authorization

  • Authorization์€ ์œ ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” request๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์œ ์ €์ธ๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ Authroization ์ ˆ์ฐจ๋Š” JWT๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„๊ฐ€๋Šฅํ•˜๊ณ  access token์„ ํ†ตํ•ด ํ•ด๋‹น ์œ ์ € ์ •๋ณด๋ฅผ ์–ป์–ด ํ•ด๋‹น ์œ ์ €๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ถŒํ•œ์„ ํ™•์ธํ•œ๋‹ค.
  • Authorization ์ ˆ์ฐจ
  1. Authorization ๊ณผ์ •์—์„œ access token์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ access token์— ์œ ์ € ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
    (๊ฐ€๋ น user id ์ •๋„)
  2. ์œ ์ €๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œย access token์„ ์š”์ฒญ์— ํ•จ๊ป˜ ์ฒจ๋ถ€ํ•ด์„œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.
  3. ์„œ๋ฒ„์—์„œ๋Š” ์œ ์ €๊ฐ€ ๋ณด๋‚ธย access token์„ ๋ณตํ˜ธํ™”(์–‘๋ฐฉํ–ฅ ํ•ด์‰ฌํ™” ๊ฐ€๋Šฅ)ํ•˜์—ฌ ๋ณตํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ user id๋ฅผ ์–ป๋Š”๋‹ค.
  4. user id๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ•ด๋‹น ์œ ์ €์˜ ๊ถŒํ•œ์„ ํ™•์ธํ•œ๋‹ค.
  5. ์œ ์ €๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ์œ ์ €๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด Unauthorized Response(401) ํ˜น์€ ๋‹ค๋ฅธ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ์‘๋‹ต์„ ํ•ด์ค€๋‹ค.

2_1. access token

  • ์œ ์ €๊ฐ€ 1> ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉดย 2> access token, ์•”ํ˜ธํ™”๋œ ์œ ์ € ์ •๋ณด๋ฅผ ์ฒจ๋ถ€ํ•ด์„œ request๋ฅผ ๋ณด๋‚ด๋ฉด 3> ์„œ๋ฒ„์—์„œ๋Š”ย access token์„ ๋ณตํ˜ธํ™” ํ•ด์„œ ํ•ด๋‹น ์œ ์ € ์ •๋ณด๋ฅผ ์–ป๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”๋ผ๊ณ  ํ•œ๋‹ค.
    -EX> ๊ฐ€๋ น ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ access token์„ ํ•จ๊ป˜ ์ฒจ๋ถ€ํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•œ๋‹ค
POST /auth HTTP/1.1
Host: localhost:5000
Content-Type: application/json
// ์œ ์ € ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ
{
    "username": "joe",
    "password": "pass"
}
// access token
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E"
}
  • ์š”์ฒญ์— ๋‹ด๊ธด access token์„ ๋ณตํ˜ธํ™”ํ•˜๋ฉด ํ•ด๋‹น ์œ ์ €์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์–ด์„œ ํ•ด๋‹น ์œ ์ €๊ฐ€ ๋งค๋ฒˆ ๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์ธ๊ฐ€๋ฅผ ํ•ด์ค€๋‹ค.
{
    user_id = 1 
}

2_2. JWT(JSON Web Tokens)

  • JWT๋ž€ access token์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์œ ์ € ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™” ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์— ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

*๐Ÿ’กconclusion

  • ์ธ์ฆ, ์ธ๊ฐ€์— ์žˆ์–ด ํ•ด์‰ฌํ™” JWT๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์‹๋ณ„๊นŒ์ง€ ํฐ ํ๋ฆ„์„ ์ดํ•ดํ•˜์ž.

#๐Ÿ“‘Study Source

  • ๊นŒ๋งˆ๋“ํ•œ ์„ธ์…˜ ๊ฐ•์˜ ์ค‘:[
profile
์ž๊ธฐ ์‹ ๋ขฐ์˜ ํž˜์„ ๋ฏฟ๊ณ  ์‹ค์ฒœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€