Azure AD OAuth Client Flow

ํšŒ์‚ฌ์—์„œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด api ์™€ front๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์— ์ธ์ฆ์„ azure ad(ํšŒ์‚ฌ์˜ ์œ ์ €์ •๋ณด)์™€ ๊ฐ™์œผ๋ฉด ํŽธํ• ๋•Œ๊ฐ€ ์žˆ๋‹ค.

Azure AD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ € ๋กœ๊ทธ์ธ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ•˜๊ณ  ์˜ค๋Š˜์€ api key์ฒ˜๋Ÿผ ์‚ฌ์šฉํ• ์ˆ˜ ์ž‡๋Š” ๋ถ€๋ถ„์„ ํ™•์ธํ•ด๋ณด์ž.

api key

Azure ad๋Š” oauth2๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

api key๋Š” oauth2์—์„œ client credential flow๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์— ์‹œํฌ๋ฆฟ์„ ๋ณด๋‚ด๋ฉด azure ad๊ฐ€ access token์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.

๊ตฌ์กฐ

azure ad์— ๊ธฐ์กด์— resource-api๋ผ๋Š” api์•ฑ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž.

postman์œผ๋กœ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

postman๋„ code flow๋ฅผ ์ง€์›ํ•˜๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” client credential flow๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

client ๋งŒ๋“ค๊ธฐ

azure ad์—์„œ app์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•œ๋‹ค.

์ด๋ฆ„์€ mycli๋กœ ํ•˜์ž.

๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

mycli ์„ค์ •

์ด์ œ ์„ค์ •์„ ํ•˜์ž.

์ผ๋‹จ ์ด ์ •๋ณด๋ฅผ ์ž˜ ์ ์–ด๋‘์ž.

endpoint๋Š” ํด๋ฆญํ•˜๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด๋‘”๋‹ค.

token end point๋ฅผ ์ž˜ ๋ณต์‚ฌํ•ด๋‘”๋‹ค.

์ด์ œ client secret๋ฅผ ๋ฐœ๊ธ‰ํ•˜์ž.

์ด์ œ ๋ฐœ๊ธ‰๊นŒ์ง€ ๋ฌ๋‹ค.

์ด์ œ Api permission์„ ์„ค์ •ํ•ด์•ผํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ api์—์„œ ๊ถŒํ•œ์„ ์˜คํ”ˆ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

api ์•ฑ์— ๊ฐ€์„œ ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ถŒํ•œ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

api app์— role ์ถ”๊ฐ€

api ์•ฑ์—์„œ app roles๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๋ฉด ๋กค์ด ์ถ”๊ฐ€๋œ๋‹ค.

mycli ์•ฑ์—์„œ ๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ๋กค์„ ์‚ฌ์šฉ

์ด์ œ role์„ ์‚ฌ์šฉํ•ด๋ณด์ž.

Api permission์„ ์„ค์ •ํ•˜์ž.

์„ค์ •ํ•˜๊ณ  ๋‚˜๋ฉด admin์— ๊ถŒํ•œ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค ์ด๊ฑด admin์—๊ฒŒ ์—ฐ๋ฝํ•˜์—ฌ ํ—ˆ๊ฐ€๋ฅผ ํ•ด๋‹ฌ๋ผ๊ณ  ํ•ด์•ผํ•œ๋‹ค.

ํ—ˆ๊ฐ€๊ฐ€ ๋˜๊ณ ๋‚˜๋ฉด ํฌ์ŠคํŠธ๋งจ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž.

ํ…Œ์ŠคํŠธ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์„ค์ •ํ•˜๊ณ  ์š”์ฒญ์„ ๋‚ ๋ฆฌ๋ฉด access token์„ ๋ฐ›์•„์˜จ๋‹ค.

token endpoint์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉ ํ•œ๋‹ค.

grant_type์€ client_credential์ด๋‹ค.

client_id๋Š” mycli์˜ client id๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ค‘์š”) scope๋Š” ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” api์— ํ•ด๋‹นํ•˜๋Š” scope๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

api์— ๊ฐ€์„œ ์ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋’ค์— /.default๋ฅผ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.

api://xxxxxxxx/.default

์ด๋Ÿฐ ํ˜•ํƒœ์ด๋‹ค.

์ด์ œ ์ด ์—‘์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ api๋ฅผ ํ˜ธ์ถœํ•ด๋ณด์ž.

ํ† ํฐ์„ ๋ณต์‚ฌํ•ด์„œ ์—ฌ๊ธฐ์— ๋„ฃ๊ณ  send๋ฅผ ํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์ด์ œ ์™„๋ฃŒ

์ด์ œ ์™„๋ฃŒ ๋˜์—ˆ๋‹ค. ๋‹ค์Œ์—๋Š” cli ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด์„œ ์–ด๋–ป๊ฒŒ ์œ„ ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

๋‹ค์Œ ๋‹จ๊ณ„

https://teamsmiley.gitbook.io/devops/go-lang/cli-azuread

์ด๊ฑธ ์ฝ์–ด๋ณด์ž.

Last updated