๐ Apple Developer์์ key ๋ฐ๊ธ๋ฐ๊ธฐ
Apple Developer ์ฌ์ดํธ์์ ๋ก๊ทธ์ธํ๊ณ , Account์ ๋ค์ด๊ฐ์ Identifier๊ณผ App ID๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ชจ๋ Authkey-.p8ํ์ผ๊ณผ id๊ฐ๋ค์ด ์ค๋น ๋ ํ, ๊ตฌํ ๋ถ๋ถ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค!
๐ฑ Apple-auth ๊ธฐ๋ณธ ์ธํ
Apple-auth๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ์ ํ ๋ก๊ทธ์ธ์ ๊ตฌํํ ์ ์์ต๋๋ค.
npm install apple-auth๋ก ์ค์น ๋จผ์ ํด์ค๋๋ค.
์ดํ configํ์ผ์ ์ค๋นํด์ผ ํ๋๋ฐ config.json ํ์ผ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Apple Developer ์ฌ์ดํธ์์ ์์ฑํ ๊ฐ๋ค๋ก ์๋๋ฅผ ์ฑ์์ผ ํฉ๋๋ค. ์ต๋ํ ๋น์ทํ๊ฒ ์์๋ฅผ ์ ์ด๋์์ผ๋ ๊ผญ ์๋ง์ถฐ์ ์ ์ด์ฃผ์ธ์~! (์ ๋ -.p8 ํค ํ์ผ์ ์ด๋ฆ๋ private_key_path๋ก ๋นผ์คฌ์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋นผ์ง ์๊ณ ๋ผ์ฐํ
์์ ๊ทธ๋ฅ ์ด๋ฆ์ผ๋ก ์ ๊ทผํด๋ ๋ฌด๊ดํฉ๋๋ค.)
{ "client_id": "com.****", "team_id": "AB1234CDE3", "key_id": "AB12CD123E", "redirect_uri": "https://apple-auth.example.com/auth", "private_key_path": "AuthKey_AB12CD123E.p8" }
{
"client_id": "com.****",
"team_id": "AB1234CDE3",
"key_id": "AB12CD123E",
"redirect_uri": "https://apple-auth.example.com/auth",
"private_key_path": "AuthKey_AB12CD123E.p8"
}
๐ณ ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ
ํ์ํ ํ์ผ๊ณผ ๋ชจ๋์ ์๋์ ๊ฐ์ด ์ ์ธํฉ๋๋ค.
const jwt = require('jsonwebtoken');
const path = require('path');
const AppleAuth = require('apple-auth');
const appleConfig = require('../../../../config/apple/apple.json');
const auth = new AppleAuth(appleConfig, path.join(__dirname, `../../../../config/apple/${appleConfig.private_key_path}`));
ํด๋ผ์ด์ธํธ์์ code๊ฐ์ ๋ฐ์์์ ์๋์ฒ๋ผ ํด๋ ํ๋ฉด ํ์ํ ๊ฐ๋ค์ ์ป์ ์ ์์ต๋๋ค. ๋ณดํต sub๊ฐ์ ๋๋น์ ์ ์ฅํด๋๊ณ ์ด๋ฅผ ํตํด์ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
let { code } = req.body;
if (!code) {
res.status(200).json(NULL_VALUE);
return;
}
const response = await auth.accessToken(code);
const idToken = jwt.decode(respon.id_token);
const email = idToken.email;
const sub = idToken.sub;
์ ์ฒ๋ผ ๊ฐ๋จํ๊ฒ ํ์ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ ๋ ๋๋น์ sub๊ฐ๊ณผ email์ ์ ์ฅํด๋๊ณ ๋๋น์ ์ด๋ฏธ ์ ์ฅ๋ ๊ฐ์ ์ฌ์ฉ์๊ฐ ์์ผ๋ฉด ํ์๊ฐ์ ํ์ด์ง๋ก ๋์ด๊ฐ๋๋ก ๊ตฌํํ์ต๋๋ค. apple-auth๊ฐ ์๋ ์ ๋ง๋ค์ด์ ธ ์์ด์ ์์ฃผ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์์ต๋๋ค!
๐ ์ฐธ๊ณ
โ apple-signin
์ ๋ apple-signin ๋ชจ๋์ ์ผ์ ๋, ๋ฐ๋ณต์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด ํ ํฐ์ ํด๋ ํ์ง ๋ชปํ๋ invalid token (์ค๋ฅ๋ฉ์ธ์ง๋ ์ ํํ ๊ธฐ์ต๋์ง ์์ต๋๋ค..!)์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๊ทธ๊ฒ ๋๋ฌธ์ app store ๋ฐฐํฌ์์ ๋ฆฌ์ ๋์์ต๋๋ค. ์์๋ณด๋ apple-signin์ ์ฌ์ฉํ์ ๋ ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์ ๋ถ๋ค์ด ๊ณ์๋๋ผ๊ตฌ์! apple-auth๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค~