๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

067 | Spring Security - OAuth 2.0 Authentication ๋ณธ๋ฌธ

SEB/TIL

067 | Spring Security - OAuth 2.0 Authentication

kexon 2022. 9. 28. 19:17

๐ŸŽˆOAuth 2.0

๐Ÿงฉ OAuth 2.0์ด๋ž€?

  • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์‹ ๋ขฐํ•  ๋งŒํ•œ ์จ๋“œ ํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(GitHub, Google, ๋“ฑ)์—์„œ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„ ๋Œ€์‹  ์ฒ˜๋ฆฌ → ์ ‘๊ทผ ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ† ํฐ ๋ฐœ๊ธ‰ → ํ•ด๋‹น ํ† ํฐ์„ ์ด์šฉํ•ด ์จ๋“œ ํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ๋ณ€ํ•จ ์—†๋‹ค. Authentication์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋งก๊ธฐ๊ณ  ํ† ํฐ์„ ๋ฐ›์•„ ์˜ฌ ๋ฟ, Authorizaiton๋Š” ์—ฌ์ „ํžˆ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • OAuth๋Š” ๋ณด์•ˆ๋œ ์ž์‹ ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ๋Š” ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. ๋Œ€์ค‘์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ์ค‘์ธ ์„œ๋น„์Šค์—์„œ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š์•„๋„ ํ•ด๋‹น ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงฉ OAuth 2.0 ์ธ์ฆ ์ปดํฌ๋„ŒํŠธ ์—ญํ• ๊ณผ ์šฉ์–ด

  • Resource Owner: ์‚ฌ์šฉํ•  ๋ฆฌ์†Œ์Šค์˜ ์†Œ์œ ์ž์ด๋‹ค.
    • ๋‚ด๊ฐ€ ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ๊ตฌ๊ธ€ ์„œ๋น„์Šค Resource์— ๋Œ€ํ•œ Resource Owner๊ฐ€ ๋œ๋‹ค.
  • Client: Resource owner๋ฅผ ๋Œ€์‹ ํ•ด ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
    • ๋‚ด๊ฐ€ ์บ”๋””ํฌ๋Ÿฌ์‰ฌ์‚ฌ๊ฐ€์—์„œ ๊ตฌ๊ธ€ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ด์šฉํ•˜๋ฉด ์บ”๋””ํฌ๋Ÿฌ์‰ฌ์‚ฌ๊ฐ€๊ฐ€ ํด๋ผ์ด์–ธํŠธ์ด๋‹ค.
  • Resource Server: user์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋กœ, Client์˜ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  Resource Owner์—๊ฒŒ ํ•ด๋‹นํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์ด๋‹ค.
    • ์บ”๋””ํฌ๋Ÿฌ์‰ฌ์‚ฌ๊ฐ€๊ฐ€ ๊ตฌ๊ธ€ํฌํ† ์—์„œ ๋‚ด Resource Owner์˜ ์‚ฌ์ง„(Resource)์„ ๊ฐ€์ ธ์˜ค๋ฉด
      ๊ตฌ๊ธ€ํฌํ†  ์„œ๋น„์Šค ์ œ๊ณต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ == Resource Server
  • Authorization Server: Client๊ฐ€ Resource Server์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์„œ๋ฒ„์ด๋‹ค.
    • ๋‚ด๊ฐ€(Resource Owner) ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ์บ”๋””ํฌ๋Ÿฌ์‰ฌ์‚ฌ๊ฐ€(Client)๋Š” Authorization Server๋กœ๋ถ€ํ„ฐ ๊ตฌ๊ธ€ํฌํ† ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋‚ด ์‚ฌ์ง„(Resource)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ(Access Token)์„ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.
    • ๋‚ด๊ฐ€(Resource Owner) ์บ”๋””ํฌ๋Ÿฌ์‰ฌ์‚ฌ๊ฐ€(Client)๋ฅผ ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด
      ๊ตฌ๊ธ€ == Resource Server & Authorization Server
  • Authorization Grant: Client๊ฐ€ ์„œ๋ฒ„์—์„œ Access Token์„ ์–ป๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์ด๋‹ค.
    • Grant type: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ์ข…๋ฅ˜๋กœ๋Š” Authorization Code Grant type, Implicit Grant Type, Client Credentials Grant Type, Resource Owner Credentials Grant Type์ด ์žˆ๋‹ค.
  • Authorization Code: ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์ „์— ํ•„์š”ํ•œ ์ฝ”๋“œ์ด๋‹ค.
  • Access Token: ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” credentials์ด๋‹ค. ์ด ํ† ํฐ์œผ๋กœ Resource Server์— ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Scope: ์ฃผ์–ด์ง„ ์•ก์„ธ์Šค ํ† ํฐ์˜ ์ ‘๊ทผ ๊ถŒํ•œ Scope ๋‚ด์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ฒ”์œ„์ด๋‹ค.

๐ŸŽˆOAuth 2.0 ๋™์ž‘ ๋ฐฉ์‹

Authorizsation Grant Type์— ๋”ฐ๋ผ ์ธ์ฆ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.

๐Ÿงฉ Authorisation Grant์— ๋”ฐ๋ฅธ ์ธ์ฆ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

๐Ÿช„ Authorisation Code Grant

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๊ณ  ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๊ถŒํ•œ ๋ถ€์—ฌ ์Šน์ธ์„ ์œ„ํ•ด ์ž์ฒด ์ƒ์„ฑํ•œ Authorisation Code๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

  1. Resource Owner๋Š” Client(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์—๊ฒŒ ์„œ๋น„์Šค ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.
  2. Client๋Š” Authorisation Server์— Authorisation Code๋ฅผ ์š”์ฒญํ•˜๋ฉด์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ Client ID, Redirect URI, ์‘๋‹ต ํƒ€์ž…์„ ํ•จ๊ป˜ ์ „์†กํ•œ๋‹ค.
  3. Resource Owner๋Š” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋กœ๊ทธ์ธ์ด ํ™•์ธ๋˜๋ฉด Authorisation Server๋Š” Client์—๊ฒŒ Authorisation Code๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
    (์ด ์ „์— ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ Redirect URI๋กœ Code๋ฅผ ์ „๋‹ฌ)
  5. Client๋Š” ์ „๋‹ฌ๋ฐ›์€ Authorisation Code๋กœ Access Token ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•œ๋‹ค.
    AccessToken์„ ์š”์ฒญํ•  ๋•Œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ Client Secret, Redirect URI, ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ์‹, Authorisation Code๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•œ๋‹ค.
  6. ์š”์ฒญ ์ •๋ณด๋ฅผ ํ™•์ธํ•œ ํ›„ Redirect URI๋กœ Access Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  7. Client๋Š” ๋ฐœ๊ธ‰๋ฐ›์€ Access Token์„ ์ด์šฉํ•ด Resource Server์— Resource๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  8. Access Token์„ ํ™•์ธํ•œ ํ›„ ์š”์ฒญ ๋ฐ›์€ Resource๋ฅผ Client์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿช„ Implicit Grant

๋ณ„๋„์˜ Authorisation Code ์—†์ด ๋ฐ”๋กœ Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ž๊ฒฉ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ธฐ ํž˜๋“  Client(์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด-js-๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €)์—๊ฒŒ ์ตœ์ ํ™”๋œ ๋ฐฉ์‹์ด๋‹ค.

  1. Resource Owner๋Š” Client(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์—๊ฒŒ ์„œ๋น„์Šค ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.
  2. Client๋Š” Authorisation Server์—๊ฒŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋ฉฐ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ Client ID, Redirect URI, ์‘๋‹ตํƒ€์ž…์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค. (Authroization Code๋ฅผ ํš๋“ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์ด ์•„๋‹˜)
  3. Resource Owner๋Š” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•œ๋‹ค.
  4. ๋กœ๊ทธ์ธ์ด ํ™•์ธ๋˜๋ฉด Authorisation Server๋Š” Client์—๊ฒŒ Access Token์„ ์ „๋‹ฌํ•œ๋‹ค.
  5. Client๋Š” Access Token์„ ์ด์šฉํ•ด Resource Server์—๊ฒŒ Resource๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  6. Access Token์„ ํ™•์ธํ•œ ํ›„ ์š”์ฒญ ๋ฐ›์€ Resource๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿช„ Resource Owner Password Credential Grant

username, password๋กœ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.

  1. Resource Owner๋Š” Client(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์—๊ฒŒ ์„œ๋น„์Šค ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค. ์ด ๋•Œ ๋กœ๊ทธ์ธ์— ํ•„์š”ํ•œ ์ •๋ณด(Username, Password)๋ฅผ ์ด์šฉํ•œ๋‹ค.
  2. Client์—์„œ๋Š” Resource Owner์—๊ฒŒ ์ „๋‹ฌ๋ฐ›์€ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ํ†ตํ•ด Authorisation Server์— Access Token์„ ์š”์ฒญํ•˜๋ฉฐ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ Client ID, ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ์‹, ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
  3. ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์˜จ ์ •๋ณด๋“ค์„ ํ™•์ธํ•œ ํ›„ Client์—๊ฒŒ Access Token์„ ์ „๋‹ฌํ•œ๋‹ค.
  4. Client๋Š” Access Token์„ ์ด์šฉํ•˜์—ฌ Resource Server์—๊ฒŒ Resource๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  5. Access Token์„ ํ™•์ธํ•œ ํ›„ ์š”์ฒญ ๋ฐ›์€ Resource๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿช„ Client Credentials Grant

์ž๊ฒฉ ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” Client์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Refresh Token์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

  1. Authorisation Server์— Access Token์„ ์š”์ฒญํ•œ๋‹ค.
  2. ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์˜จ ์ •๋ณด๋“ค์„ ํ™•์ธํ•˜๊ณ  Client์— Access Token์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. Client๋Š” Access Token์„ ์ด์šฉํ•ด Resource Server์— ์ž์› ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  4. Access Token์„ ํ™•์ธํ•˜๊ณ  ์š”์ฒญ ๋ฐ›์€ ์ž์›์„ ์ „๋‹ฌํ•œ๋‹ค.

'SEB > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

069 | AWS - EC2, RDS, S3  (0) 2022.09.30
061 | ์ธ์ฆ๋ณด์•ˆ ๊ธฐ์ดˆ  (0) 2022.09.20
058 | Asciidocs, Asciidoctor  (2) 2022.09.15
057 | API Documentation, Swagger, SpringRest  (0) 2022.09.14
052 | Transaction  (0) 2022.09.05
Comments