[Spring Security] Access Token์„ ์ด์šฉํ•œ ์ธ์ฆ

2023. 10. 19. 09:55ยทWeb & Android/Spring Security
๐Ÿ’ก Access Token์„ ์ด์šฉํ•œ ์ธ์ฆ

JWT

  • JSON Web Token์˜ ์•ฝ์ž
  • ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”์‹œํ‚จ ํ† ํฐ์„ ๋งํ•˜๋ฉฐ Access Token์œผ๋กœ ์‚ฌ์šฉ๋จ
  • JWT๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  Header, Payload, Verify Signature ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•จ

Header

  • ํ† ํฐ์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” typ์™€ ์•”ํ˜ธํ™”ํ•  ๋ฐฉ์‹์„ ์ •ํ•˜๋Š” alg๋กœ ๊ตฌ์„ฑ๋จ
{
  'alg': 'HS256',
  'typ': 'JWT'
}

Paylod

  • ํ† ํฐ์— ๋‹ด์„ ์ •๋ณด๋ฅผ ํฌํ•จ
  • ํ•˜๋‚˜์˜ ์ •๋ณด ์กฐ๊ฐ์„ ํด๋ ˆ์ž„์ด๋ผ ๋ถ€๋ฆ„
  • ํด๋ ˆ์ž„์˜ ์ข…๋ฅ˜ → Registered, Public, Private 3๊ฐ€์ง€ ์กด์žฌ
  • ๋ณดํ†ต ๋งŒ๋ฃŒ ์ผ์‹œ, ๋ฐœ๊ธ‰ ์ผ์‹œ, ๋ฐœ๊ธ‰์ž, ๊ถŒํ•œ ์ •๋ณด ๋“ฑ์„ ํฌํ•จ
{
  'sub': '1234567890',
  'name': 'John Doe',
  'admin': true,
  'iat': 1516239022
}

Verify Signature

  • Paylod๊ฐ€ ์œ„๋ณ€์กฐ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ฆ๋ช…ํ•˜๋Š” ๋ฌธ์ž์—ด
  • Base64 ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ Header, Payload ๊ทธ๋ฆฌ๊ณ  Secret Key๋ฅผ ๋”ํ•œ ํ›„ ์„œ๋ช…๋จ
HMACSHA256 {
  base64UrlEncode(header) + '.' +
  base64UrlEncode(payload),
  your-256-bit-secret
}

์™„์„ฑ๋œ ํ† ํฐ

  • Header, Payload๋Š” ์ธ์ฝ”๋”ฉ๋  ๋ฟ, ๋”ฐ๋กœ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์Œ→ ํ•˜์ง€๋งŒ Verify Signature๋Š” Sercret Key๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†์Œ
  • → ๋”ฐ๋ผ์„œ Header, Payload๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋””์ฝ”๋”ฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ •๋ณด๊ฐ€ ์‰ฝ๊ฒŒ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ
  • ๋งŒ์•ฝ ํ—ค์ปค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์„ ํ›”์ณ Payload์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ† ํฐ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค๋ฉด, ์„œ๋ฒ„์—์„œ Verify Signature๋ฅผ ๊ฒ€์‚ฌํ•˜๊ฒŒ ๋จ→ ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ Sercret Key๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ํ† ํฐ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†์Œ
  • → ์—ฌ๊ธฐ์„œ Verify Signature๋Š” ํ•ด์ปค์˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•”ํ˜ธํ™”๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์ปค๊ฐ€ ๋ณ€๊ฒฝํ•œ ์ •๋ณด๋กœ ๋ณด๋‚ธ ํ† ํฐ์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฌ์œผ๋กœ ๊ฐ„์ฃผํ•จ

์ธ์ฆ ์ˆœ์„œ

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•จ
  2. ์„œ๋ฒ„์—์„œ๋Š” ๊ณ„์ • ์ •๋ณด๋ฅผ ์ฝ์–ด ์‚ฌ์šฉ์ž ํ™•์ธ ํ›„, ์‚ฌ์šฉ์ž์˜ ๊ณ ์œ ํ•œ ID๊ฐ’์„ ๋ถ€์—ฌํ•˜๊ณ  Payload์— ์ •๋ณด๋ฅผ ๋„ฃ์Œ
  3. JWT ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„ ์„ค์ •
  4. Sercret Key๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ Access Token์„ HTTP ์‘๋‹ต ํ—ค๋”์— ์‹ค์–ด ๋ณด๋ƒ„
  5. ์‚ฌ์šฉ์ž๋Š” Access Token์„ ๋ฐ›์•„ ์ €์žฅ ํ›„, ์ธ์ฆ์ด ํ•„์š”ํ•œ ์š”์ฒญ๋งˆ๋‹ค ํ† ํฐ์„ HTTP ์š”์ฒญ ํ—ค๋”์— ์‹ค์–ด ๋ณด๋ƒ„
  6. ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น ํ† ํฐ์˜ Verify Signature๋ฅผ Sercret Key๋กœ ๋ณตํ˜ธํ™”ํ•œ ํ›„, ์กฐ์ž‘ ์—ฌ๋ถ€, ์œ ํšจ ๊ธฐ๊ฐ„์„ ํ™•์ธ
  7. ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋œ๋‹ค๋ฉด, Payload๋ฅผ ๋””์ฝ”๋”ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ID์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

์žฅ์ 

  • ๊ฐ„ํŽธํ•จ
  • ์„ธ์…˜๊ณผ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ์€ ๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ์˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ. ๊ทธ๋Ÿฌ๋‚˜ JWT๋Š” ๋ฐœ๊ธ‰ ํ›„ ๊ฒ€์ฆ๋งŒ ๊ฑฐ์น˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†์Œ
  • ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚จ. ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ์ธ์ฆ ์‹œ์Šคํ…œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•จ

๋‹จ์ 

  • JWT๋Š” ํ•œ ๋ฒˆ ๋ฐœ๊ธ‰๋˜๋ฉด ์œ ํšจ๊ธฐ๊ฐ„์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€๋Š” ๊ณ„์† ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ค‘๊ฐ„์— ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ⇒ ํ•ด๊ฒฐ์ฑ… : Refresh Token์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ๊ธ‰ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹
  • → ๋”ฐ๋ผ์„œ ํ•ด์ปค์— ์˜ํ•ด ์ •๋ณด๊ฐ€ ํ„ธ๋ฆฐ๋‹ค๋ฉด ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ• ์—†์Œ
  • Payload ์ •๋ณด๊ฐ€ ๋””์ฝ”๋”ฉํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์—†์Œ
  • JWT์˜ ๊ธธ์ด๊ฐ€ ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์„œ๋ฒ„์˜ ์ž์›๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒ
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Web & Android > Spring Security' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Security] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์‹ค์Šต - Web  (0) 2023.10.19
[Spring Security] Access Token+ Refresh Token์„ ์ด์šฉํ•œ ์ธ์ฆ  (1) 2023.10.19
[Spring Security] ์„ธ์…˜๊ณผ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ  (0) 2023.10.17
[Spring Security] Form Login ๊ฐœ๋… & ์‚ฌ์šฉ๋ฒ•  (1) 2023.10.17
[Spring Security] Security์˜ ํ๋ฆ„  (1) 2023.10.17
'Web & Android/Spring Security' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Security] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์‹ค์Šต - Web
  • [Spring Security] Access Token+ Refresh Token์„ ์ด์šฉํ•œ ์ธ์ฆ
  • [Spring Security] ์„ธ์…˜๊ณผ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ
  • [Spring Security] Form Login ๊ฐœ๋… & ์‚ฌ์šฉ๋ฒ•
woojin._.
woojin._.
์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๋ฉฐ ๋ฐœ์ƒํ•˜๋Š” ์ด์•ผ๊ธฐ๋“ค์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • ์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • ๋ฆฌ๋ˆ…์Šค (7)
        • AWS (7)
      • Coding Test (445)
        • ๋ฐฑ์ค€[JAVA] (108)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[JAVA] (260)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  Kit[JAVA] (3)
        • SQL ๊ณ ๋“์  Kit[ORACLE] (74)
      • CS ์ง€์‹ (49)
        • [์ž๋ฃŒ๊ตฌ์กฐ] (14)
        • [๋„คํŠธ์›Œํฌ] (12)
        • [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] (10)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜] (9)
        • [์šด์˜์ฒด์ œ] (4)
      • ๊ธฐํƒ€ (6)
      • ์ž๊ฒฉ์ฆ & ๊ณต๋ถ€ (62)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (2)
        • SQLD (6)
        • ๋„คํŠธ์›Œํฌ๊ด€๋ฆฌ์‚ฌ 2๊ธ‰ (5)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (44)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰ (1)
        • ISTQB (3)
        • ์‹œ์Šคํ…œ๋ณด์•ˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์Šคํ”„๋ง
    ๋ฐฑ์ค€
    spring
    Oracle
    CS
    programmers
    CS์ง€์‹
    ๋ฐ์ดํ„ฐ
    ์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA
    springboot
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ
    baekjoon
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    backjoon
    Linux
    pcce ๊ธฐ์ถœ๋ฌธ์ œ
    Flutter
    JPA
    postgresql
    ํ”Œ๋Ÿฌํ„ฐ
    ๋ฆฌ๋ˆ…์Šค
    ์Šคํ”„๋ง๋ถ€ํŠธ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์‹œํ๋ฆฌํ‹ฐ
    DB
    Java
    Spring Security
    python
    ์ž๋ฐ”
  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
woojin._.
[Spring Security] Access Token์„ ์ด์šฉํ•œ ์ธ์ฆ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”