Sign In With Apple : ์ƒˆ๋กœ์šด ID ์ œ๊ณต ์—…์ฒด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.

์›๋ฌธ: https://auth0.com/blog/what-is-sign-in-with-apple-a-new-identity-provider/ Apple WWDC 2019์—์„œ ๋ฐœํ‘œ๋œ ์ƒˆ๋กœ์šด ID ์ œ๊ณต ์—…์ฒด์ธ Sign In With Apple์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.

๋ธŒ๋ฃจ๋…ธ ํฌ๋ ™์Šค 2019-06-06!!

๋ชฉ์ฐจ

์ด์ œ Auth0์˜ ๋งž์ถค์‹ ์†Œ์…œ ์—ฐ๊ฒฐ ๋•๋ถ„์— ์•ฑ์— ํŠน๋ณ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ ๋„ Sign In With Apple์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! Sign In With Apple์„ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.

TL;DR: Apple WWDC 2019์—์„œ ๋ฐœํ‘œ๋œ Sign In With Apple ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค. ์ด ์ธ์ฆ ์˜ต์…˜์€ ๊ณง ๋ชจ๋“  App Store ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ์ œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ๋ฐ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ–ฅ์ƒ๋œ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ์™„๋ฒฝํ•œ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด Apple ์—์ฝ” ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Apple ๊ธฐ๋Šฅ ๋ฐฉ๋ฌธ ํŽ˜์ด์ง€ ๋ชจํ˜• ์‚ฌ์ง„์œผ๋กœ ๋กœ๊ทธ์ธํ•˜์‹ญ์‹œ์˜ค.

"Apple WWDC 2019์—์„œ ๋ฐœํ‘œ๋œ ์ƒˆ๋กœ์šด ID ์ œ๊ณต ์—…์ฒด ์ธ Sign In With Apple์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค."

Apple์— ๋กœ๊ทธ์ธ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์™œ?

์˜ฌํ•ด WWDC์—์„œ ์• ํ”Œ์ด ์ „ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฃผ์š” ๋ฉ”์‹œ์ง€ ์ค‘ ํ•˜๋‚˜๋Š” ํšŒ์‚ฌ๊ฐ€ ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ์—ผ๋ คํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋…ธ๋ ฅ๊ณผ ํ•จ๊ป˜, ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์˜ ์ˆ˜์„ ๋ถ€์‚ฌ์žฅ ํฌ๋ ˆ์ด๊ทธ ํŽ˜๋”๋ฆฌ๊ธฐ๋Š” "Sign In With Apple" ๊ธฐ๋Šฅ์˜ ๋„์ž… ์•„์ดํฐ OS(13)์™€ ๋งฅ OS ์นดํƒˆ๋ฆฌ๋‚˜ ์ถœ์‹œ๋  ์˜ˆ์ •์œผ๋กœ ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฐ€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์†Œ์…œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ๊ทธ์ธํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ž์™€ ์†Œ์…œ ๊ณต๊ธ‰์ž๊ฐ€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ผ๋ฐ˜์ ์ธ ๊ด€ํ–‰์— ์†Œ๊ฐœ๋œ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ฌธ์ œ๋ฅผ ์ œ์‹œํ•œ ํ›„ Craig๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. Apple์— ๋กœ๊ทธ์ธํ•˜์‹ญ์‹œ์˜ค.

ํฌ๋ ˆ์ด๊ทธ (Craig)์˜ ๋ง์— ๋”ฐ๋ฅด๋ฉด, ์ด ์†”๋ฃจ์…˜์€ "๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ์•ฑ์— ๋ฐ”๋กœ ์„œ๋ช… ๋ฒ„ํŠผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ API"๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์•„์ด๋”” ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒฝ์šฐ Apple์€ "์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„๋กœ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ํ•œ" ์–ด๋– ํ•œ ๊ฐœ์ธ ์ •๋ณด๋„ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค.

WWDC 2019 ๊ธฐ์กฐ ์—ฐ์„ค ์ค‘ ์ด ๋ถ€๋ถ„์˜ ์ดˆ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ ์ •๋ณด๋ฅผ ์ค‘์š”์‹œํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์ด ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ์•ฑ๊ณผ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์ด ๋งค์šฐ ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค.

ํฌ๋ ˆ์ด๊ทธ (Craig)๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ž ๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ˆจ๊ธฐ๋ ค๊ณ  ๊ฒฐ์‹ฌํ–ˆ์„ ๋•Œ ์• ํ”Œ์€ ๊ฐ ์•ฑ๋งˆ๋‹ค ๊ณ ์œ ํ•˜๊ฒŒ ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑ ๋œ ์ „์ž ๋ฉ”์ผ ์ฃผ์†Œ ๋งŒ ๊ณต์œ  ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹น ์ด๋ฉ”์ผ ์ฃผ์†Œ์˜ ๊ณ ์œ ์„ฑ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์• ํ”Œ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์˜ ํด๋ฆญ๋งŒ์œผ๋กœ ๋” ์ด์ƒ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ์•ฑ์„ โ€‹โ€‹"์Œ์†Œ๊ฑฐ"ํ•˜๋„๋ก ํ—ˆ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฑ์ด ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

"Sign In With Apple์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ ์•ฑ๋งˆ๋‹ค ๊ณ ์œ ํ•˜๊ฒŒ ์ƒ์„ฑ ๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์†Œ์Œ ์•ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค."

Sign In With Apple์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Apple์˜ ๋ฐœํ‘œ ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด Sign In With Apple ๊ธฐ๋Šฅ์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์• ํ”Œ์€์ด ๊ธฐ๋Šฅ์„ ์–ธ๊ธ‰ :

"์˜ฌํ•ด ํ›„๋ฐ˜๊ธฐ์— ์ƒ์—…์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ œ 3 ์ž ๋กœ๊ทธ์ธ์„ ์ง€์›ํ•˜๋Š” ์•ฑ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์˜ต์…˜์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค."

์ฆ‰, ์•ฑ ์Šคํ† ์–ด์— ์•ฑ์„ ๊ฒŒ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ์ œ 3 ์ž ๋กœ๊ทธ์ธ ์˜ต์…˜ (์˜ˆ : Facebook, Google ๋˜๋Š” Twitter)์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณง ์ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹น๋ถ„๊ฐ„ ์• ํ”Œ์€ ์•ฑ์—์„œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž๋กœ์„œ ์• ํ”Œ์„ ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐ™์€ ๋ฌธ์„œ์—์„œ "์ด ๊ธฐ๋Šฅ์€ ์•„์ง ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ ์ค‘"์ด๋ผ๊ณ  ๋˜์–ด โ€‹โ€‹์žˆ์œผ๋ฉฐ ์•„์ง ๊ณต๊ฐœ ์˜๋ฌด๊ฐ€ ๋งŒ๋ฃŒ๋œ ๋‚ ์งœ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

"์• ํ”Œ์ด ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์• ํ”Œ์˜ ์ƒˆ๋กœ์šด ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•  ๊ฒƒ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค."

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ณผ์ œ

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ๋ฆฌํŒฉํ„ฐ๋ง์€ ์‰ฌ์šด ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฆฌํŒฉํ† ๋ง์— ID ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์•„์ด๋ดํ‹ฐํ‹ฐ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ๋…์ž์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ํ•˜๋‚˜์”ฉ ํ†ตํ•ฉํ•˜๋Š” ํšŒ์‚ฌ๋Š” ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ๋ฐ”์ด๋”์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋” ์ค‘์š”ํ•œ ์ฝ”๋“œ ๋ฐ ํ†ตํ•ฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ด๊ฒƒ์ด iOS ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ ์ผ ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ด€๋ จ iOS ์•ฑ์ด์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด์žˆ๋Š” ๊ฒฝ์šฐ Sign In With Apple๋„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด ์ƒํ™ฉ์„ ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. iOS ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ฒ„์ „์˜ ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ๊ณ„์ •์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— Auth0 ๊ณผ ๊ฐ™์€ ID ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ์› ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ์ƒˆ๋กœ์šด ์‹ ์› ์ œ๊ณต ์—…์ฒด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚˜๋ฉด ์Šค์œ„์น˜ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ์˜ต์…˜์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ Sign In With Apple ๊ธฐ๋Šฅ๊ณผ ํ†ตํ•ฉํ•˜๋ ค๋Š” ์ฒซ ์‹œ๋„ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ  ๋‹จ๊ณ„์— ์•„์ง ๊ด€์‹ฌ์ด ์—†๋‹ค๋ฉด์ด ์„น์…˜์„ ๊ฑด๋„ˆ ๋›ฐ์–ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

Sign In With Apple ๊ตฌํ˜„

์ด ์ƒˆ๋กœ์šด ์•„์ด๋ดํ‹ฐํ‹ฐ ํ”„๋กœ๋ฐ”์ด๋”๋Š” ์—ฌ์ „ํžˆ ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ ์ค‘์ด์ง€๋งŒ , Node.js์™€ Express ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Sign In With Apple ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•œ ์ƒ˜ํ”Œ์„ ์ด๋ฏธ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ˆ์—์„œ๋Š” ์ƒ˜ํ”Œ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ์„ค๋ช…ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ๋ฐ๋ชจ ์šฉ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ์šฉ์ด๋ฉฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค (๊ณต๊ธ‰์ž์™€ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์นจ์œผ๋กœ ๊ฐ„์ฃผํ•ด์„œ๋Š” ์•ˆ ๋จ).

Sign In With Apple ๋ฐฉ๋ฒ•

๋‹คํ–‰ํžˆ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด Apple์€ Apple์˜ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๊ณต๊ฐœ ํ‘œ์ค€์„ ๊ณ ์ˆ˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ณต์‹์ ์œผ๋กœ์ด ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ณต๊ฐœ์ ์œผ๋กœ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์–ธ๊ธ‰์ด ํ•˜๋‚˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ์„น์…˜์—์„œ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ฒ˜๋Ÿผ Apple์€ OAuth 2.0 ๋ฐ OIDC (OpenID Connect) ํ‘œ์ค€์˜ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : Apple์ด ์ง€๊ธˆ๊นŒ์ง€ ํ‘œ์ค€์— ์ œ์‹œํ•œ ์œ ์ผํ•œ ์–ธ๊ธ‰์€ WWDC 2019์—์„œ "Sign In With Apple ์†Œ๊ฐœ" ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์˜ 11๋ถ„(11:00)์ž…๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ์—ฐ์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค. "๊ธฐ์กด OAuth ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉ๋œ ๊ฒฝ์šฐ Sign In With Apple์€ ๋งค์šฐ ์ต์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค."

๋‹ค์Œ์— ๋ณด๊ฒŒ ๋  ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ธ์ฆ ์ฝ”๋“œ ๋ถ€์—ฌ ํ”Œ๋กœ ์˜ OIDC ํŠน์ง•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๋กœ๊ทธ์ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ์•ฑ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ Apple๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ์ธ์ฆ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด Apple์€ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์•ฑ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ์—์„œ ์ด ์ฝ”๋“œ๋ฅผ ํ† ํฐ์œผ๋กœ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ… ๋ฒˆํ˜ธ ์„ธ ๊ฐ€์ง€๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•ฑ ์ „๋‹ฌํ•˜๋Š” ID ํ† ํฐ ํš๋“ํ•  ๋ช‡ ๊ฐ€์ง€ (๊ทธ๋Ÿฌ๋‚˜, ๋ฏผ๊ฐํ•œ ์•„๋ฌด๊ฒƒ๋„) ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ํ˜„์žฌ๋กœ์„œ๋Š” ์ž„์˜์˜ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž (์˜ˆ : ์ด๋ฉ”์ผ ์ฃผ์†Œ)๋ณด๋‹ค ์˜๋ฏธ์žˆ๋Š” ๊ฒƒ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ๋†€์ง€๋„ ๋งˆ scopes.

"์šด ์ข‹๊ฒŒ๋„, ์• ํ”Œ์€ OAuth์™€ OpenID Connect๋ฅผ ๊ณ ์ˆ˜ํ•˜๋ฉด์„œ ์• ํ”Œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค."

์ „์ œ ์กฐ๊ฑด

์ œ์‹œ๋œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ฃผ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ (์˜ˆ : brunokrebs.com)๊ณผ ์ž‘์„ฑํ•˜๋ ค๋Š” ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌ ํ‚ต๋‹ˆ๋‹ค. ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ ์ด ๋„๋ฉ”์ธ์„ ๋Œ€์‹ ํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” "์‹ค์ œ"์„œ๋ฒ„ (์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ์„œ๋ฒ„์ฒ˜๋Ÿผ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์ด ์„œ๋ฒ„๋Š” TLS ์ธ์ฆ์„œ (Apple์€ ๋ณด์•ˆ๋˜์ง€ ์•Š์€ HTTP ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)์™€ npm ๋ฐ Node.js (์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก)๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Email Relay Service๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด SPF (Sender Policy Framework) DNS TXT ๋ ˆ์ฝ”๋“œ๋กœ ๋„๋ฉ”์ธ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Apple ์„ค๋ช…์„œ์™€ ํ•จ๊ป˜ ๊ณต์‹ ๋กœ๊ทธ์ธํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์ด ๋””์ง€ํ„ธ ์˜ค์…˜ (์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ž์Šต์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์„ค์ •๊นŒ์ง€ ์–ป๋Š” ์ด๊ฒƒ ๊ณผ ์ด๊ฒƒ ), Freenom ๋ฐ ํ•˜์ž ์•”ํ˜ธํ™”๋ฅผ.

๊ณ„์†ํ•˜๊ธฐ ์ „์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Apple ๊ฐœ๋ฐœ์ž ๊ณ„์ • ๊ตฌ์„ฑ

์šฐ์„ , ํ”Œ๋žซํผ์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Apple ๊ฐœ๋ฐœ์ž ๊ณ„์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๊ณ„์ •์€ ์œ ๋ฃŒ์ด๋ฉฐ iOS ๊ฐœ๋ฐœ์ž ๋Œ€ํ•™ ํ”„๋กœ๊ทธ๋žจ์— ์ฐธ์—ฌํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฌด๋ฃŒ ํ‰๊ฐ€ํŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•˜๋ฉด "์ธ์ฆ์„œ, ID ๋ฐ ํ”„๋กœํ•„" ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ "์‹๋ณ„์ž" ํ•˜์œ„ ์„น์…˜์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Apple Developer - Certificates, IDs, & Profiles page of Developer Account

Apple Developer - ๊ฐœ๋ฐœ์ž ๊ณ„์ •์˜ ์ธ์ฆ์„œ, ID ๋ฐ ํ”„๋กœํ•„ ํŽ˜์ด์ง€

์ด ํ•˜์œ„ ์„น์…˜์—์„œ '์•ฑ ID ๋“ฑ๋ก ๋ฒ„ํŠผ'์„ ํด๋ฆญํ•˜๊ณ  ์‹๋ณ„์ž ์œ ํ˜•์œผ๋กœ ์•ฑ ID๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ '๊ณ„์†'์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ ํ›„์—๋Š” ์ƒˆ๋กœ์šด App ID ( "Apple Experimentation์œผ๋กœ ๋กœ๊ทธ์ธ"๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ) ๋ฐ ๋ฒˆ๋“ค ID์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ๊ฒฝ์šฐ, ์—ญ ๋„๋ฉ”์ธ ์ด๋ฆ„ ์Šคํƒ€์ผ ๋ฌธ์ž์—ด (์˜ˆ : com.brunokrebs.appid)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์กฐ๊ธˆ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ "Sign In With Apple" ๊ธฐ๋Šฅ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. Apple์ด ์ œ๊ณตํ•˜๋Š” "ํŽธ์ง‘"๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์กฐ๊ธˆ๋งŒ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋‹ค๋ฅธ ์˜ต์…˜์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ๋‘๊ณ  "๊ณ„์†"์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. ์ด ๋‹จ์ถ”๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฐฉ๊ธˆ ์ฑ„์šด ์˜ต์…˜์— ๋Œ€ํ•œ ์š”์•ฝ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด "Register"๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์‹ญ์‹œ์˜ค.

์ž ์‹œ ํ›„, Apple์€ "์ธ์ฆ์„œ, ์‹๋ณ„์ž ๋ฐ ํ”„๋กœํ•„"ํ•˜์œ„ ์„น์…˜์œผ๋กœ ๋‹ค์‹œ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ƒˆ ์•ฑ ID๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์— ํ•„์š”ํ•œ ๊ฒƒ์€ Node.js ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์„œ๋น„์Šค ID๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ค‘๋ณต ๋œ ๋…ธ๋ ฅ์ฒ˜๋Ÿผ ๋ณด์ผ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ ์• ํ”Œ์€ ๊ฐ™์€ ๊ฒƒ์„ ์ •๋ฆฌํ•˜์—ฌ ๋™์ผํ•œ ์•ฑ ID๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ID๋ฅผ ์ค‘์ฒฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์žฅ์น˜๋ฅผ ์ง€์›ํ•˜๋Š” ์•ฑ์˜ ๋ฒ„์ „์ด ๋‹ค๋ฅผ ๋•Œ ํ›จ์”ฌ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ "์‹๋ณ„์ž"ํ—ค๋” ์˜†์— ์žˆ๋Š” ๋‘ฅ๊ทผ ํŒŒ๋ž€์ƒ‰ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. "์„œ๋น„์Šค ID"๋ฅผ ์„ ํƒํ•˜๊ณ  "๊ณ„์†"์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ ํ™”๋ฉด์—์„œ ์ด์ „๊ณผ ๋™์ผํ•œ ํ•„๋“œ (์„ค๋ช… ๋ฐ ์‹๋ณ„์ž)๋ฅผ ์ฑ„์›Œ์•ผํ•˜๊ณ  "Sign In With Apple"๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ•„๋“œ์˜ ๊ฒฝ์šฐ "Apple Web App์—์„œ ๋กœ๊ทธ์ธ"(์„ค๋ช…)๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค com.brunokrebs.webapp.

Apple ๊ฐœ๋ฐœ์ž - ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ID ๋“ฑ๋ก, ์‹๋ณ„์ž ๋ฐ ์„ค๋ช… ์ž…๋ ฅ

๊ทธ ์™ธ์—๋„ "Sign In With Apple" ๊ธฐ๋Šฅ์„ ํ™•์ธํ•œ ํ›„์—๋Š” ์˜†์— ์žˆ๋Š” "๊ตฌ์„ฑ"๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Apple์€ "์›น ๋„๋ฉ”์ธ"์„ ์ •์˜ํ•˜๊ณ  (์˜ˆ: brunokrebs.com), "Return URL"(์˜ˆ:brunokrebs.com/callback)์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ "์ €์žฅ"๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "์„œ๋น„์Šค ID ๋“ฑ๋ก"ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ "๊ณ„์†"์„ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ํ™”๋ฉด์—์„œ "๋“ฑ๋ก"์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.

์„œ๋น„์Šค ID๋ฅผ ๋“ฑ๋กํ•˜๋ฉด Apple์—์„œ "์ธ์ฆ์„œ, ์‹๋ณ„์ž ๋ฐ ํ”„๋กœํ•„"ํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ ์„œ๋น„์Šค ID๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ ๋งˆ์ง€๋ง‰ ๊ตฌ์„ฑ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ฆญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (๋ถˆํ–‰ํ•˜๊ฒŒ๋„์ด ๋‹จ๊ณ„๋Š” ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ด์•ผ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

ํด๋ฆญํ•˜๋ฉด Apple์—์„œ ์„œ๋น„์Šค์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ "Sign In With Apple"๊ธฐ๋Šฅ ์˜†์— ์žˆ๋Š” "๊ตฌ์„ฑ"๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ท€ํ•˜์˜ ๋„๋ฉ”์ธ ์˜†์— "๋‹ค์šด๋กœ๋“œ"๋ฐ "ํ™•์ธ"์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์ƒˆ๋กœ์šด ๋‹จ์ถ”๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"๋‹ค์šด๋กœ๋“œ"๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Apple์—์„œ ํŒŒ์ผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค apple-developer-domain-association.txt. ์ด ํŒŒ์ผ์€ ๊ณง ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฃผ๋ณ€์— ๋ณด๊ด€ํ•˜์‹ญ์‹œ์˜ค. ๋˜ํ•œ ํŽ˜์ด์ง€๋ฅผ ์—ด์–ด ๋‘์‹ญ์‹œ์˜ค. ์ž ์‹œ ํ›„์— "ํ™•์ธ"๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

Apple ๊ฐœ๋ฐœ์ž ๊ณ„์ •์„ ๊ตฌ์„ฑํ•œ ํ›„ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ €์žฅํ•  ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค (์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ apple-sign-in-sample). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ npm ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

# start the npm project
npm init -y

# install its dependencies
npm i dotenv \
  express \
  express-session \
  jsonwebtoken \
  passport \
  passport-oauth

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

const express = require("express");
const session = require("express-session");
const port = process.env.PORT || 3000;
const passport = require("passport");
const OAuth2Strategy = require("passport-oauth").OAuth2Strategy;
const fs = require("fs");
const jwt = require("jsonwebtoken");

const domainAssociation = fs.readFileSync(
  "./apple-developer-domain-association.txt",
  "utf8"
);
const appleStrategy = "apple";

const app = express();

app.use(
  session({
    secret: "secret",
    saveUninitialized: false,
    resave: false
  })
);

app.use(passport.initialize());
app.use(passport.session());

passport.use(
  "apple",
  new OAuth2Strategy(
    {
      authorizationURL: "https://appleid.apple.com/auth/authorize",
      tokenURL: "https://appleid.apple.com/auth/token",
      clientID: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      callbackURL: process.env.CALLBACK,
      state: Date.now() // bleh
    },
    (accessToken, refreshToken, payload, profile, done) => {
      done(null, { profile, payload });
    }
  )
);

passport.serializeUser((user, done) => {
  done(null, user);
});

passport.deserializeUser((user, done) => {
  done(null, user);
});

app.get("/.well-known/apple-developer-domain-association.txt", (req, res) => {
  res.send(domainAssociation);
});

app.get("/auth/apple", passport.authenticate(appleStrategy));

app.get(
  "/callback",
  passport.authenticate(appleStrategy, {
    successRedirect: "/",
    failureRedirect: "/login"
  })
);

app.get("/profile", (req, res) => {
  res.send(
    jwt.decode(req.session.passport.user.payload.id_token, { complete: true })
  );
});

app.get("/", (req, res) => {
  console.log("User", req.user);
  res.send(JSON.stringify({ Hello: "World" }));
});

app.listen(port, () => {
  console.log(`Apple Login POC listening on port ${port}!`);
});

์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ฉด apple-developer-domain-association.txt ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ์ด ํŒŒ์ผ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Apple์—์„œ ์ด์ „ ์„น์…˜์—์„œ ์‚ฌ์šฉํ•œ ๋„๋ฉ”์ธ์˜ ์†Œ์œ ์ž์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, Apple์—์„œ ๋‹ค์šด๋กœ๋“œ ํ•œ ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

export CLIENT_ID=test
export CLIENT_SECRET=test
export CALLBACK=test

npm start

์ฐธ๊ณ  :test ํ˜„์žฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋‚จ๊ฒจ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ด ๋ณ€์ˆ˜๋“ค์„ ๊ตฌ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ๋‹ค์Œ ๋งํฌ์—์„œ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค http://localhost:3000/.well-known/apple-developer-domain-association.txt. ์ด ๊ฒฝ์šฐ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Apple์—์„œ ๋„๋ฉ”์ธ ์†Œ์œ ๊ถŒ ํ™•์ธํ•˜๊ธฐ

์ด์ œ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ ๋กœ์ปฌ์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (์ฆ‰, ์ตœ์ข… ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณต ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์›ํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํž˜๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋„์›€ scp์ด๋‚˜ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ). ์ „์ž๋Š” ์•„๋งˆ ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ค์ œ ์„œ๋ฒ„ (Apple ๊ฐœ๋ฐœ์ž ๊ณ„์ •์—์„œ ๊ตฌ์„ฑํ•œ ๋„๋ฉ”์ธ์„ ๋Œ€์‹ ํ•˜์—ฌ ์‘๋‹ตํ•ด์•ผ ํ•จ)์—์„œ ์‹คํ–‰ํ•œ ํ›„์—๋Š” ์—ด๋ ค ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€์„œ "ํ™•์ธ"๋ฒ„ํŠผ์„ ํด๋ฆญ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด Apple์€ ๊ท€ํ•˜๊ฐ€ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋„๋ฉ”์ธ์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Apple ๊ฐœ๋ฐœ์ž - ๋„๋ฉ”์ธ ์†Œ์œ ๊ถŒ ํ™•์ธ ๋ฐ ์ฝœ๋ฐฑ ๋ฐ˜ํ™˜ URL ์ถ”๊ฐ€

๊ทธ ์™ธ์—๋„ Apple์—์„œ ์ œ๊ณตํ•˜๋Š” ์ „์ž ๋ฉ”์ผ ๋ฆด๋ ˆ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด "์ธ์ฆ์„œ, ์‹๋ณ„์ž ๋ฐ ํ”„๋กœํ•„" ์„น์…˜์—์„œ "์ž์„ธํžˆ"๋ฅผ ํด๋ฆญํ•˜๊ณ  "๊ตฌ์„ฑ"์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. ๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ "๋„๋ฉ”์ธ ๋ฐ ๊ด€๋ จ ์ด๋ฉ”์ผ ์ฃผ์†Œ"์— ์žˆ๋Š” ์ž…๋ ฅ๋ž€์— ๋„๋ฉ”์ธ (์˜ˆ : brunokrebs.com)์„ ์ถ”๊ฐ€ํ•˜๊ณ  "๋“ฑ๋ก"์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "๊ฐœ๋ณ„ ์ด๋ฉ”์ผ ์ฃผ์†Œ"์— ์ด๋ฉ”์ผ ์ฃผ์†Œ (์˜ˆ : me@brunokrebs.com)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  "๋“ฑ๋ก"์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค.

์ฐธ๊ณ  : ์ž ์‹œ ๋™์•ˆ์ด ์†์„ฑ์„ ๊ตฌ์„ฑํ•˜๋”๋ผ๋„ ๋ฆด๋ ˆ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ๋กœ๊ทธ์ธํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ž„์˜๋กœ ์ƒ์„ฑ ๋œ ๊ณ ์œ  ํ•œ ์ „์ž ๋ฉ”์ผ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ OpenID Connect ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด email(์ ์–ด๋„ ์•„์ง์€) ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Apple ๊ฐœ๋ฐœ์ž - Sign In With Apple ๊ตฌ์„ฑ - ์ „์ž ๋ฉ”์ผ ์ค‘๊ณ„ ์„œ๋น„์Šค

Apple์ด ์„ค๋ช…ํ•˜๋Š”๋Œ€๋กœ :

Apple์˜ ๊ฐœ์ธ ์ „์ž ๋ฉ”์ผ ์ค‘๊ณ„ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ฐ๋ฝํ•˜๋ ค๋ฉด ์กฐ์ง์—์„œ ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ๋„๋ฉ”์ธ๊ณผ ์ „์ž ๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ž ๋ฉ”์ผ ์ฃผ์†Œ์™€ ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ ๋ฐ ๋„๋ฉ”์ธ์€ Sender Policy Framework ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ ์„ฑ๊ณต์ ์œผ๋กœ ๋“ฑ๋ก๋˜๊ธฐ ์ „์— Apple์—์„œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Apple ๊ตฌ์„ฑ์œผ๋กœ ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑํ•˜๊ธฐ

์ด์ œ Apple์—์„œ ๋„๋ฉ”์ธ์„ ํ™•์ธํ–ˆ์œผ๋ฏ€๋กœ ์ด ID ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹ค์Œ ๋ณ€์ˆ˜ ์ค‘ ๋‘ ๊ฐ€์ง€๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋จผ์ € ๊ฐœ๋ฐœ์ž ๋Œ€์‹œ๋ณด๋“œ์˜ "์ธ์ฆ์„œ, ์‹๋ณ„์ž ๋ฐ ํ”„๋กœํ•„" ์„น์…˜์—์„œ "ํ‚ค"๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ƒˆ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‘ฅ๊ทผ ํŒŒ๋ž€์ƒ‰ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Apple์ด ์–‘์‹์„ ํ‘œ์‹œํ•˜๋ฉด "Apple Key๋กœ ๋กœ๊ทธ์ธ"์„ ์‚ฌ์šฉํ•˜์—ฌ "Key Name"ํ•„๋“œ๋ฅผ ์ฑ„์šฐ๊ณ  "Apple๋กœ ๋กœ๊ทธ์ธ"์˜ต์…˜์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ์ด ํŽ˜์ด์ง€์—์„œ "๊ตฌ์„ฑ"์„ ํด๋ฆญํ•˜์—ฌ "๊ธฐ๋ณธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ID ์„ ํƒ"ํ•„๋“œ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ID๋กœ ์ฑ„์›Œ ์กŒ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ์ž๋ฆฌ๋ฅผ ์ง€ํ‚ค๋ฉด "์ €์žฅ"์„ ๋ˆ„๋ฅธ ๋‹ค์Œ "๊ณ„์†"์„ ๋ˆ„๋ฅธ ๋‹ค์Œ "๋“ฑ๋ก"(์„ธ ๊ฐœ์˜ ๋ฒ„ํŠผ, ์„ธ ํŽ˜์ด์ง€)์„ ๋ˆŒ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Apple ๊ฐœ๋ฐœ์ž - Sign In With Apple์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•

๋งˆ์ง€๋ง‰ ํ™”๋ฉด์—์„œ "๋“ฑ๋ก"์„ ํด๋ฆญํ•˜๋ฉด Apple์—์„œ ์ƒˆ ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ํ•œ ํ›„ ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค. ํŒŒ์ผ์„ ์ด๋™ํ•˜๋Š” ๋™์•ˆ ์ž‘์—…์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค authkey.p8. Apple Developer Portal๋กœ ๋Œ์•„๊ฐ€์„œ "์™„๋ฃŒ"๋ฅผ ํด๋ฆญํ•˜๊ณ  ํ‚ค ID๋ฅผ ์ ์–ด ๋‘์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋˜๋Š” ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

const jwt = require("jsonwebtoken");
const fs = require("fs");

const privateKey = fs.readFileSync("./authkey.p8");
const token = jwt.sign({}, privateKey, {
  algorithm: "ES256",
  expiresIn: "2 days",
  audience: "https://appleid.apple.com",
  issuer: "TEAM_ID",
  subject: "com.brunokrebs.webapp",
  keyid: "KEY_ID"
});

console.log("The token is:", token);

์ฐธ๊ณ  :com.brunokrebs.webapp ์„œ๋น„์Šค ID ๋ฐ TEAM_IDํŒ€ ID์˜ ์‹๋ณ„์ž๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด ์ด ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค. ๋˜ํ•œ KEY_ID๋ฅผ ์•ž์„œ ์–ธ๊ธ‰ํ•œ ํ‚ค ID๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด ์ž‘์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.

node generate-secret.js

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ’์€ CLIENT_SECRET ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋กœ ๊ฐ€์„œ ์‹คํ–‰์ค‘์ธ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

# now you need to use the real values
export CLIENT_ID=com.brunokrebs.webapp
export CLIENT_SECRET=eyJ...KsA
export CALLBACK=https://brunokrebs.com/callback

npm start

์ฐธ๊ณ  : ์ด๋ฒˆ์—๋Š” ์ตœ์ข… ๊ฐ’์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ๋„๋ฉ”์ธ์—์„œ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ์•ฑ์„ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ /auth/.apple์ด ๋„๋ฉ”์ธ์—์„œ ๊ฒฝ๋กœ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด Sign In With Apple ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

Apple ID (Sign In With Apple) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ๊ทธ์ธํ•˜๋Š” ์˜ˆ

์ด ํŽ˜์ด์ง€์—์„œ ์œ ํšจํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉด Apple์—์„œ ๋‹ค์ค‘ ์ธ์ฆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚œ ํ›„ ์•ฑ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด์šฉ์€ ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด์ง€๋งŒ ์ด ํ•ญ๋ชฉ๊ณผ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Apple ์—์„œ์˜ ๋กœ๊ทธ์ธ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Apple์˜ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฐœํ‘œ ์ดํ›„, Auth0์˜ ์—ฌ๋Ÿฌ ํŒ€์ด ์ „์ฒด์ ์ธ ํ•จ์˜๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ–ˆ์œผ๋ฉฐ, Apple์˜ ์‚ฌ์šฉ์ž ๋ฐ ์•ฑ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€์— ๋Œ€ํ•ด ๊ณ„์† ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์—, ์šฐ๋ฆฌ๋Š” Auth0์ด ์–ด๋–ป๊ฒŒ Apple์˜ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ง€์›ํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ์˜ˆ๋ฅผ ์ œ์‹œํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ฌธ์˜ ์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด ์ด ๊ฒŒ์‹œ๋ฌผ์˜ ํ•˜๋‹จ์— ์žˆ๋Š” ์˜๊ฒฌ๋ž€์— ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค!

๋ธŒ๋ฃจ๋…ธ ํฌ๋ ™์Šค

R & D ์ฝ˜ํ…์ธ  ์„ค๊ณ„์ž

ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ๋ณต์›๋ ฅ์ด ๋›ฐ์–ด๋‚œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์—ด์ •์ ์ž…๋‹ˆ๋‹ค. ์ „ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋ถ€ํ„ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค (Kubernetes, Docker ๋“ฑ), ํ”„๋ก ํŠธ ์—”๋“œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” "๋‹จ์ˆœํ•œ"์•ฑ์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ ์ง€ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์กฐ๊ฐ์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ณ  ์ฆ๊ฑฐ์šด ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋†€๋ž๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํ”„๋กœํ•„๋ณด๊ธฐ

What Else?
inflearn react api server -50% ํ• ์ธ์ฟ ํฐ: 15108-f2af1e086101 buy me a coffee