Mon Apr 13 2020
...
FastComments๋ก SSO ์ค์ ํ๊ธฐ
๊ฐ์
SSO๋ ๋ฌด์์ธ๊ฐ์?
SSO(์ฑ๊ธ ์ฌ์ธ์จ)๋ ์ฌ์ฉ์๊ฐ ์ถ๊ฐ ๊ณ์ ์ ๋ง๋ค ํ์ ์์ด FastComments๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๋ ์ผ๋ จ์ ๊ท์น์ ๋๋ค.
์ต๋ช ๋๊ธ ์์ฑ์ ํ์ฉํ์ง ์๋ ๊ฒฝ์ฐ FastComments๋ก ๋๊ธ์ ๋ฌ๋ ค๋ฉด ๊ณ์ ์ด ํ์ํฉ๋๋ค. ์ ํฌ๋ ์ด ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ๋ง๋ค์์ต๋๋ค - ์ฌ์ฉ์๋ ๋๊ธ์ ๋ฌ ๋ ์ด๋ฉ์ผ๋ง ๋จ๊ธฐ๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง, ์ ํฌ๋ ์ผ๋ถ ์ฌ์ดํธ๊ฐ ์ด๋ฅผ ํผํ๊ณ ์ถ์ด ํ๋ค๋ ๊ฒ์ ์ดํดํ๊ณ ์์ต๋๋ค.
์ด๋ป๊ฒ ์ป์ ์ ์๋์?
๋ชจ๋ ๊ณ์ ์ ํ์ ํ์ฌ SSO์ ์ง์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ SSO ์ฌ์ฉ์ ์ต๋ ์๋ ํจํค์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
WordPress ์ฌ์ฉ์
์ ํฌ WordPress ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์ฝ๋ ์์ฑ์ด ํ์ ์์ต๋๋ค! ํ๋ฌ๊ทธ์ธ์ ๊ด๋ฆฌ์ ํ์ด์ง๋ก ์ด๋ํ์ฌ SSO ์ค์ ์ ํด๋ฆญํ ํ ํ์ฑํ๋ฅผ ๋๋ฌ์ฃผ์ธ์.
์ด๊ฒ์ API ํค๋ฅผ ์์ฑํ๊ณ WordPress ์ค์น๋ก ์ ์กํ์ฌ SSO๋ฅผ ์ผ๋ ๋จ์ผ ๋ฒํผ ํด๋ฆญ ๋ง๋ฒ์ฌ๋ก ์๋ดํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ทํ๋ฅผ ์ํด ๋จ์ผ ๋ฒํผ ํด๋ฆญ์ผ๋ก ํตํฉํ์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ์ฒ์ ์ค์นํ๋ ๊ฒฝ์ฐ SSO ์ค์ ๋ฒํผ์ด ์๋ ๊ด๋ฆฌ์ ํ์ด์ง๋ฅผ ๋ณด๋ ค๋ฉด ์ค์ ํ๋ก์ธ์ค๋ฅผ ์๋ฃํด์ผ ํฉ๋๋ค.
๋ง์ถคํ ํตํฉ
FastComments SSO๋ SSO๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ผ๋ก HMAC-SHA256 ์ํธํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋จผ์ ์ ์ฒด ์ํคํ ์ฒ ๊ฐ์๋ฅผ ์ค๋ช ํ๊ณ , ์์ ์ ์์ธํ ๋จ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ๋์๋ Disqus ๋ฐ Commento์์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ด๋์ด ์์ต๋๋ค.
ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
FastComments SSO์ ํจ๊ป ์ API ์๋ํฌ์ธํธ๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋น๋ฐ ํค๋ก ์ํธํํ๊ณ ํ์ด๋ก๋๋ฅผ ๋๊ธ ์์ ฏ์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
NodeJS, Java/Spring, ๊ธฐ๋ณธ PHP๋ฅผ ํฌํจํ ์ฌ๋ฌ ์ธ์ด/๋ฐํ์์์ ์์ ํ ์๋ํ๋ ์ฝ๋ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. NodeJS ์์ ์์๋ ExpressJS๋ฅผ ์ฌ์ฉํ์ง๋ง Java ์์ ์์๋ Spring์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ฐํ์์์ FastComments SSO๋ฅผ ๊ตฌํํ๋ ๋ฐ ํ์ํ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ต๋๋ค - ๊ธฐ๋ณธ crypto ํจํค์ง๋ก ์ถฉ๋ถํฉ๋๋ค.
์ฝ๋ ์์ ์ ์ฅ์๋ ๋ค์์์ ํ์ธํ ์ ์์ต๋๋ค:
FastComments SSO ์ฝ๋ ์์
API ๋น๋ฐ ํค ๊ฐ์ ธ์ค๊ธฐ
๊ทํ์ API ๋น๋ฐ ํค๋ ์ด ํ์ด์ง์์ ๊ฒ์ํ ์ ์์ต๋๋ค. My Account๋ก ์ด๋ํ์ฌ API/SSO ํ์ผ์ ํด๋ฆญํ ํ "API ๋น๋ฐ ํค ๊ฐ์ ธ์ค๊ธฐ"๋ฅผ ํด๋ฆญํ์ฌ ์ด ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋๊ธ ์์ ฏ ๋งค๊ฐ๋ณ์
๋๊ธ ์์ ฏ์ ๋ํ ๊ณ ์์ค API ๋ฌธ์๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ผ๋ฉฐ, "๊ณ ๊ธ ์ต์ ํ์"๋ฅผ ํด๋ฆญํ์ธ์. ํ์ด์ง์์ SSO๋ฅผ ๊ฒ์ํ์ธ์.
์ด ๋งค๊ฐ๋ณ์๋ค์ด ์๋ฏธํ๋ ๋ฐ์ ๋ํด ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋๊ธ ์์ ฏ์ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๊ฐ๋๋ค - FastComments๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ๊ฐ ID(tenantId๋ผ๊ณ ํจ)๋ฅผ ์ ๋ฌํ๋ฉด ์ด๋ฏธ ์ด ๊ฐ์ ์ ๋ฌํ๊ณ ์์ต๋๋ค.
SSO๋ฅผ ํ์ฑํํ๋ ค๋ฉด ์ "sso" ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ธ์. ์ด ๊ฐ์ฒด๋ ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๊ฐ์ ์๋ฒ ์ธก์์ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
- userDataJSONBase64: ์ฌ์ฉ์์ JSON ํ์ ๋ฐ์ดํฐ, ์ดํ Base64๋ก ์ธ์ฝ๋ฉ๋จ.
- verificationHash: UNIX_TIME + userDataJSONBase64๋ก ์์ฑ๋ HMAC-SHA256 ํด์.
- timestamp: ํ์ฌ ์ ๋์ค ์๊ฐ. ๋ฏธ๋์ ์๊ฐ์ด๊ฑฐ๋ ๊ณผ๊ฑฐ 3์๊ฐ์ ์ด๊ณผํด์๋ ์ ๋ฉ๋๋ค.
- loginURL: ๋๊ธ ์์ ฏ์ด ์ฌ์ฉ์๋ฅผ ๋ก๊ทธ์ธ์ํฌ ์ ์๋ URL.
- logoutURL: ๋๊ธ ์์ ฏ์ด ์ฌ์ฉ์๋ฅผ ๋ก๊ทธ์์์ํฌ ์ ์๋ URL.
- loginCallback: ๋ก๊ทธ์ธ URL ๋์ ์ ๊ณต๋ ๋, ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ์ ๋๊ธ ์์ ฏ์ด ํธ์ถํ ํจ์.
- logoutCallback: ๋ก๊ทธ์์ URL ๋์ ์ ๊ณต๋ ๋, ๋ก๊ทธ์์ ๋ฒํผ ํด๋ฆญ ์ ๋๊ธ ์์ ฏ์ด ํธ์ถํ ํจ์.
์ฌ์ฉ์ ๊ฐ์ฒด
์ฌ์ฉ์ ๊ฐ์ฒด๋ ๋ค์ ์คํค๋ง๋ฅผ ํฌํจํฉ๋๋ค:
- id(๋ฌธ์์ด, ํ์)(์ต๋ 1k ๋ฌธ์)
- email(๋ฌธ์์ด, ํ์)(์ต๋ 1k ๋ฌธ์). ์ฃผ์: ์ ์ผํด์ผ ํจ.
- username(๋ฌธ์์ด, ํ์)(์ต๋ 1k ๋ฌธ์). ์ฃผ์: ์ฌ์ฉ์ ์ด๋ฆ์ ์ด๋ฉ์ผ์ผ ์ ์์ต๋๋ค. ์ ์ผํ ํ์๋ ์์.
- avatar(๋ฌธ์์ด, ์ ํ ์ฌํญ)(์ต๋ 3k ๋ฌธ์)
- optedInNotifications(๋ถ์ธ, ์ ํ ์ฌํญ)
- displayLabel(๋ฌธ์์ด, ์ ํ ์ฌํญ, ์ต๋ 100 ๋ฌธ์). ์ด ๋ ์ด๋ธ์ ์ด๋ฆ ์์ ํ์๋ฉ๋๋ค.
- websiteUrl(๋ฌธ์์ด, ์ ํ ์ฌํญ, ์ต๋ 2000 ๋ฌธ์). ์ฌ์ฉ์์ ์ด๋ฆ์ ์ฌ๊ธฐ์ ๋งํฌ๋ฉ๋๋ค.
์๋ฆผ
์๋ฆผ์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ๋ ค๋ฉด optedInNotifications ๊ฐ์ ๊ฐ๊ฐ true ๋๋ false๋ก ์ค์ ํ์ธ์. ์ฌ์ฉ์๊ฐ ์ด ๊ฐ์ ๊ฐ์ง SSO ํ์ด๋ก๋๋ก ํ์ด์ง๋ฅผ ์ฒ์ ๋ก๋ํ ๋, ๊ทธ๋ค์ ์๋ฆผ ์ค์ ์ด ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
VIP ์ฌ์ฉ์ ๋ฐ ํน๋ณ ๋ ์ด๋ธ
์ ํ์ "displayLabel" ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ด๋ฆ ์์ ํน๋ณ ๋ ์ด๋ธ์ ํ์ํ ์ ์์ต๋๋ค.
์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์
์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์๋ฅผ ๋ํ๋ด๋ ค๋ฉด userDataJSONBase64, verificationHash ๋๋ timestamp๋ฅผ ๋น์๋๋ฉด ๋ฉ๋๋ค. loginURL์ ์ ๊ณตํ์ธ์.
์ฌ์ฉ์ ๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ํด์ฑ์ ์ํ ์ง์ ์์
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ (js), ์ฌ๊ธฐ (java) ๋ฐ ์ฌ๊ธฐ (php)์์ ํ์ธํ์ธ์.
Disqus SSO์์ ๋ง์ด๊ทธ๋ ์ด์
Disqus์ FastComments SSO์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ Disqus๊ฐ SHA1์ ์ฌ์ฉํ์ฌ ์ํธํํ๋ ๋ฐ๋ฉด ์ ํฌ๋ SHA256์ ์ฌ์ฉํ๋ค๋ ์ ์ ๋๋ค. ๋ฐ๋ผ์ Disqus์์์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฉ์ดํฉ๋๋ค - ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ SHA1์์ SHA256์ผ๋ก ๋ณ๊ฒฝํ๊ณ UI์ ์ ๋ฌ๋๋ ์์ฑ ์ด๋ฆ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค.
Commento SSO์์ ๋ง์ด๊ทธ๋ ์ด์
Commento๋ ์๋นํ ๋ค๋ฅธ SSO ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค - ์ธ์ฆ์ ์ํด ํธ์ถํ๋ ์๋ํฌ์ธํธ๋ฅผ ์๊ตฌํฉ๋๋ค. FastComments๋ ๊ทธ ๋ฐ๋์ ๋๋ค - ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋น๋ฐ ํค๋ก ์ํธํํ๊ณ ํด์ํ ํ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ชจ๋ ํตํฉ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ํ๋ค ์ ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ์ฃผ์ ํ์ง ๋ง๊ณ ๊ทํ์ ๋ด๋น์์๊ฒ ์ฐ๋ฝํ๊ฑฐ๋ ์ง์ ํ์ด์ง๋ฅผ ์ด์ฉํ์ธ์.
