ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API์ ๊ธฐ๋ฅ, ๊ตฌํ ๋ฐ ๋ณด์๊ณผ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธ์ฆ ํ๋ฆ ๊ตฌ์ถ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๋ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API: ์ธ์ฆ ํ๋ฆ ๊ฐ์ํ
์ค๋๋ ์ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ํํ๊ณ ์์ ํ ์ธ์ฆ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ด์ ์ ์ฐํฉ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API๋ก ์๋ ค์ก๋ ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API(FedCM)๋ ์ธ์ฆ ํ๋ก์ธ์ค ์ค์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐ ๋ณด์์ ๊ฐ์ ํ๋ฉด์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋จ์ํํ๊ณ ํฅ์์ํค๊ธฐ ์ํด ์ค๊ณ๋ ๋ธ๋ผ์ฐ์ API์ ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ FedCM์ ๊ธฐ๋ฅ, ๊ตฌํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ๊ตฌํ๋ฉด์ FedCM์ ๋ณต์ก์ฑ์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค.
ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API(FedCM)๋ ๋ฌด์์ธ๊ฐ์?
FedCM์ ์น์ฌ์ดํธ๊ฐ ๊ธฐ์กด ์ ์ ๊ณต๊ธ์(IdP)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ํ์ฉํ๋๋ก ํ๋ ์น ํ์ค์ ๋๋ค. ํ์ฌ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ฆฌ FedCM์ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ๋์ํ ๋๊น์ง ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์น์ฌ์ดํธ์ ์ง์ ๊ณต์ ํ๋ ๊ฒ์ ํผํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๊ฐํํ๊ณ ๊ต์ฐจ ์ฌ์ดํธ ์ถ์ ์ ์ํ์ ์ค์ ๋๋ค.
FedCM์ ๋ธ๋ผ์ฐ์ ๊ฐ ์น์ฌ์ดํธ(์ ๋ขฐ ๋น์ฌ์ ๋๋ RP)์ ์ ์ ๊ณต๊ธ์(IdP) ๊ฐ์ ํต์ ์ ์ค์ฌํ๊ธฐ ์ํ ํ์คํ๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ค์ฌ๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ์ฌ์ฉํ ์ ์์ ์ ํํ ์ ์์ด ํฌ๋ช ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
FedCM ์ฌ์ฉ์ ์ฃผ์ ์ด์
- ํฅ์๋ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ: ๋ช ์์ ์ธ ๋์๊ฐ ์ฃผ์ด์ง ๋๊น์ง ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ์น์ฌ์ดํธ์ ๋ถํ์ํ๊ฒ ๊ณต์ ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ํฅ์๋ ๋ณด์: ํ์ฌ ์ฟ ํค์ ๋ํ ์์กด๋๋ฅผ ์ค์ฌ ๊ต์ฐจ ์ฌ์ดํธ ์ถ์ ๊ณผ ๊ด๋ จ๋ ๋ณด์ ์ทจ์ฝ์ ์ ์ํํฉ๋๋ค.
- ๊ฐ์ํ๋ ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ์ ์ ๊ณต๊ธ์๋ฅผ ์ ํํ ์ ์๋ ๋ช ํํ๊ณ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ๋ก๊ทธ์ธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ด ์ฆ๊ฐ: ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ๊ณต์ ํ ์ ์์ ์ ์ดํ ์ ์๋๋ก ํ์ฌ ์ ๋ขฐ์ ํฌ๋ช ์ฑ์ ๋์ ๋๋ค.
- ํ์คํ๋ API: ์ ์ ๊ณต๊ธ์์ ํตํฉํ๊ธฐ ์ํ ์ผ๊ด๋๊ณ ์ ์ ์๋ API๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋จ์ํํฉ๋๋ค.
FedCM ์ธ์ฆ ํ๋ฆ ์ดํด
FedCM ์ธ์ฆ ํ๋ฆ์ ์ฌ๋ฌ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋จ๊ณ๋ ์์ ํ๊ณ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ ์ธ์ฆ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ์ ๋ขฐ ๋น์ฌ์(RP) ์์ฒญ
์ด ํ๋ก์ธ์ค๋ ์ ๋ขฐ ๋น์ฌ์(์น์ฌ์ดํธ ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์
)๊ฐ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํด์ผ ํ ๋ ์์๋ฉ๋๋ค. RP๋ IdentityProvider ์ต์
๊ณผ ํจ๊ป navigator.credentials.get API๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ์์ฒญ์ ์์ํฉ๋๋ค.
์์:
navigator.credentials.get({
identity: {
providers: [{
configURL: 'https://idp.example.com/.well-known/fedcm.json',
clientId: 'your-client-id',
nonce: 'random-nonce-value'
}]
}
})
.then(credential => {
// ์ธ์ฆ ์ฑ๊ณต
console.log('์ฌ์ฉ์ ID:', credential.id);
})
.catch(error => {
// ์ธ์ฆ ์ค๋ฅ ์ฒ๋ฆฌ
console.error('์ธ์ฆ ์คํจ:', error);
});
2. ๋ธ๋ผ์ฐ์ ์ ์ญํ
RP์ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐ๋ ์ ์ ๊ณต๊ธ์๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ, ์ฌ์ฉ ๊ฐ๋ฅํ IdP๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ์ํ๋ ๋ธ๋ผ์ฐ์ ์ค์ฌ UI๋ฅผ ํ์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ configURL ๋งค๊ฐ๋ณ์์ ์ง์ ๋ URL์์ IdP์ ๊ตฌ์ฑ์ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ตฌ์ฑ ํ์ผ์๋ ์ผ๋ฐ์ ์ผ๋ก IdP์ ์๋ํฌ์ธํธ, ํด๋ผ์ด์ธํธ ID ๋ฐ ๊ธฐํ ๊ด๋ จ ์ค์ ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
3. ์ฌ์ฉ์ ์ ํ ๋ฐ ๋์
์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ UI์์ ์ ํธํ๋ ์ ์ ๊ณต๊ธ์๋ฅผ ์ ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ธ๋ผ์ฐ์ ๋ RP์ ์ ์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ ๋ํ ์ฌ์ฉ์ ๋์๋ฅผ ์์ฒญํฉ๋๋ค. ์ด ๋์๋ ์ฌ์ฉ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐ ์ ์ด๋ฅผ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๋์ ํ๋กฌํํธ๋ ์ผ๋ฐ์ ์ผ๋ก RP์ ์ด๋ฆ, IdP์ ์ด๋ฆ, ๊ณต์ ๋๋ ์ ๋ณด์ ๋ํ ๊ฐ๋ตํ ์ค๋ช ์ ํ์ํฉ๋๋ค. ์ฌ์ฉ์๋ ์์ฒญ์ ํ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
4. ์ ์ ๊ณต๊ธ์(IdP) ์ํธ ์์ฉ
์ฌ์ฉ์๊ฐ ๋์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ IdP์ ์ํธ ์์ฉํ์ฌ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ๊ฒ์ํฉ๋๋ค. ์ด ์ํธ ์์ฉ์๋ ์ฌ์ฉ์๋ฅผ IdP์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ํ์ฌ ๊ธฐ์กด ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ ์ ์๋๋ก ํ๋ ๊ณผ์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ IdP๋ ์ฌ์ฉ์ ์ ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ด์ค์ (์: JWT)์ ๋ธ๋ผ์ฐ์ ์ ๋ฐํํฉ๋๋ค. ์ด ์ด์ค์ ์ RP๋ก ์์ ํ๊ฒ ๋ค์ ์ ์ก๋ฉ๋๋ค.
5. ์๊ฒฉ ์ฆ๋ช ๊ฒ์ ๋ฐ ํ์ธ
๋ธ๋ผ์ฐ์ ๋ IdP๋ก๋ถํฐ ๋ฐ์ ์ด์ค์ ์ RP์ ์ ๊ณตํฉ๋๋ค. RP๋ ์ด์ค์ ์ ์ ํจ์ฑ์ ํ์ธํ๊ณ ์ฌ์ฉ์ ์ ์ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
RP๋ ์ผ๋ฐ์ ์ผ๋ก IdP์ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ค์ ์ ์๋ช ์ ํ์ธํฉ๋๋ค. ์ด๋ ์ด์ค์ ์ด ์์กฐ๋์ง ์์์ผ๋ฉฐ ์ ๋ขฐํ ์ ์๋ IdP์์ ์์๋์์์ ๋ณด์ฅํฉ๋๋ค.
6. ์ฑ๊ณต์ ์ธ ์ธ์ฆ
์ด์ค์ ์ด ์ ํจํ๋ฉด RP๋ ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ๋์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค. RP๋ ์ฌ์ฉ์ ์ธ์ ์ ์ค์ ํ๊ณ ์์ฒญ๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
FedCM ๊ตฌํ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
FedCM์ ๊ตฌํํ๋ ค๋ฉด ์ ๋ขฐ ๋น์ฌ์(RP)์ ์ ์ ๊ณต๊ธ์(IdP)๋ฅผ ๋ชจ๋ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์์ํ๋ ๋ฐ ๋์์ด ๋๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋๊ฐ ์์ต๋๋ค.
1. ์ ์ ๊ณต๊ธ์(IdP) ๊ตฌ์ฑ
IdP๋ ์ ์๋ ค์ง URL(์: https://idp.example.com/.well-known/fedcm.json)์ ๊ตฌ์ฑ ํ์ผ์ ๋
ธ์ถํด์ผ ํฉ๋๋ค. ์ด ํ์ผ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ IdP์ ์ํธ ์์ฉํ๋ ๋ฐ ํ์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
fedcm.json ๊ตฌ์ฑ ์์:
{
"accounts_endpoint": "https://idp.example.com/accounts",
"client_id": "your-client-id",
"id_assertion_endpoint": "https://idp.example.com/assertion",
"login_url": "https://idp.example.com/login",
"branding": {
"background_color": "#ffffff",
"color": "#000000",
"icons": [{
"url": "https://idp.example.com/icon.png",
"size": 24
}]
},
"terms_of_service_url": "https://idp.example.com/terms",
"privacy_policy_url": "https://idp.example.com/privacy"
}
๊ตฌ์ฑ ๋งค๊ฐ๋ณ์ ์ค๋ช :
accounts_endpoint: RP๊ฐ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด๋ฅผ ๊ฒ์ํ ์ ์๋ URL์ ๋๋ค.client_id: IdP๊ฐ RP์ ํ ๋นํ ํด๋ผ์ด์ธํธ ID์ ๋๋ค.id_assertion_endpoint: RP๊ฐ ์ฌ์ฉ์์ ๋ํ ID ์ด์ค์ (์: JWT)์ ์ป์ ์ ์๋ URL์ ๋๋ค.login_url: IdP์ ๋ก๊ทธ์ธ ํ์ด์ง URL์ ๋๋ค.branding: ๋ฐฐ๊ฒฝ์, ํ ์คํธ ์์ ๋ฐ ์์ด์ฝ์ ํฌํจํ IdP์ ๋ธ๋๋ฉ ์ ๋ณด์ ๋๋ค.terms_of_service_url: IdP์ ์๋น์ค ์ฝ๊ด URL์ ๋๋ค.privacy_policy_url: IdP์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์ ์ฑ URL์ ๋๋ค.
2. ์ ๋ขฐ ๋น์ฌ์(RP) ๊ตฌ์ฑ
RP๋ navigator.credentials.get API๋ฅผ ์ฌ์ฉํ์ฌ FedCM ์ธ์ฆ ํ๋ฆ์ ์์ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ IdP์ ๊ตฌ์ฑ URL ๋ฐ ํด๋ผ์ด์ธํธ ID ์ง์ ์ด ํฌํจ๋ฉ๋๋ค.
RP ์ฝ๋ ์์:
navigator.credentials.get({
identity: {
providers: [{
configURL: 'https://idp.example.com/.well-known/fedcm.json',
clientId: 'your-client-id',
nonce: 'random-nonce-value'
}]
}
})
.then(credential => {
// ์ธ์ฆ ์ฑ๊ณต
console.log('์ฌ์ฉ์ ID:', credential.id);
// credential.id๋ฅผ ๋ฐฑ์๋๋ก ๋ณด๋ด ํ์ธ
fetch('/verify-credential', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ credentialId: credential.id })
})
.then(response => response.json())
.then(data => {
if (data.success) {
// ์ธ์
์ฟ ํค ๋๋ ํ ํฐ ์ค์
console.log('์๊ฒฉ ์ฆ๋ช
ํ์ธ ์ฑ๊ณต');
} else {
console.error('์๊ฒฉ ์ฆ๋ช
ํ์ธ ์คํจ');
}
})
.catch(error => {
console.error('์๊ฒฉ ์ฆ๋ช
ํ์ธ ์ค๋ฅ:', error);
});
})
.catch(error => {
// ์ธ์ฆ ์ค๋ฅ ์ฒ๋ฆฌ
console.error('์ธ์ฆ ์คํจ:', error);
});
3. ๋ฐฑ์๋ ํ์ธ
FedCM ํ๋ฆ์์ ๋ฐ์ credential.id๋ ๋ฐฑ์๋์์ ํ์ธ๋์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์๊ฒฉ ์ฆ๋ช
์ ์ ํจ์ฑ์ ํ์ธํ๊ณ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด IdP์ ํต์ ํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
๋ฐฑ์๋ ํ์ธ ์์ (๊ฐ๋ ์ ):
// ์์ฌ ์ฝ๋ - ์ค์ ๋ฐฑ์๋ ๊ตฌํ์ผ๋ก ๋์ฒด
async function verifyCredential(credentialId) {
// 1. credentialId๋ก IdP์ ํ ํฐ ํ์ธ ์๋ํฌ์ธํธ ํธ์ถ
const response = await fetch('https://idp.example.com/verify-token', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ token: credentialId, clientId: 'your-client-id' })
});
const data = await response.json();
// 2. IdP๋ก๋ถํฐ์ ์๋ต ํ์ธ
if (data.success && data.user) {
// 3. ์ฌ์ฉ์ ์ ๋ณด ์ถ์ถ ๋ฐ ์ธ์
์์ฑ
const user = data.user;
// ... ์ธ์
๋๋ ํ ํฐ ์์ฑ ...
return { success: true, user: user };
} else {
return { success: false, error: 'Invalid credential' };
}
}
FedCM ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ๊ฐ๋ ฅํ Nonce ์ฌ์ฉ: Nonce๋ ์ฌ์ ์ก ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ ๊ฐ์ ๋๋ค. ๊ฐ ์ธ์ฆ ์์ฒญ์ ๋ํด ๊ฐ๋ ฅํ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ nonce๋ฅผ ์์ฑํ์ญ์์ค.
- ๊ฐ๋ ฅํ ๋ฐฑ์๋ ํ์ธ ๊ตฌํ: ์ ํจ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด FedCM ํ๋ฆ์์ ๋ฐ์ ์๊ฒฉ ์ฆ๋ช ์ ํญ์ ๋ฐฑ์๋์์ ํ์ธํ์ญ์์ค.
- ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ: ์ธ์ฆ ์คํจ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ์ตํ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ญ์์ค.
- ๋ช ํํ ์ฌ์ฉ์ ์ง์นจ ์ ๊ณต: ์ฌ์ฉ์์๊ฒ FedCM ์ฌ์ฉ์ ์ด์ ๊ณผ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ญ์์ค.
- ์ฒ ์ ํ ํ ์คํธ: ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฐ ์ ์ ๊ณต๊ธ์๋ก FedCM ๊ตฌํ์ ํ ์คํธํ์ญ์์ค.
- ์ ์ง์ ๊ฐ์ ๊ณ ๋ ค: FedCM์ ์ ์ง์ ๊ฐ์ ์ผ๋ก ๊ตฌํํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ FedCM์ ์ง์ํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋์ฒด ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ญ์์ค.
- ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ์ค์: HTTPS ์ฌ์ฉ, ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๊ณต๊ฒฉ ๋ฐฉ์ด, ๊ฐ๋ ฅํ ์ํธ ์ ์ฑ ๊ตฌํ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์น ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
์ ์ฌ์ ๊ณผ์ ํด๊ฒฐ
FedCM์ ์๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ๊ณผ์ ๋ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ง์: FedCM์ ๋น๊ต์ ์๋ก์ด API์ด๋ฉฐ, ๋ธ๋ผ์ฐ์ ์ง์์ ๋ค๋ฅผ ์ ์์ต๋๋ค. FedCM์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋์ฒด ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- IdP ์ฑํ: FedCM์ ๊ด๋ฒ์ํ ์ฑํ์ API ์ง์์ ๊ตฌํํ๋ ์ ์ ๊ณต๊ธ์์ ๋ฌ๋ ค ์์ต๋๋ค. ์ ํธํ๋ IdP๊ฐ FedCM์ ์ฑํํ๋๋ก ์ฅ๋ คํ์ญ์์ค.
- ๋ณต์ก์ฑ: FedCM์ ๊ตฌํํ๋ ๊ฒ์ ๊ธฐ์กด ์ธ์ฆ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ๋ฐ ํ์ํ ์ ๋ฌธ ์ง์๊ณผ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ์ญ์์ค.
- ์ฌ์ฉ์ ๊ต์ก: ์ฌ์ฉ์๋ FedCM๊ณผ ๊ทธ ์ด์ ์ ์ต์ํ์ง ์์ ์ ์์ต๋๋ค. FedCM์ด ์๋ํ๋ ๋ฐฉ์๊ณผ ์ด์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค.
- ๋๋ฒ๊น : FedCM ๊ตฌํ ๋๋ฒ๊น ์ API์ ๋ธ๋ผ์ฐ์ ์ค์ฌ ํน์ฑ์ผ๋ก ์ธํด ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ RP, IdP ๋ฐ ๋ธ๋ผ์ฐ์ ๊ฐ์ ํต์ ์ ๊ฒ์ฌํ์ญ์์ค.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
FedCM์ ๋ณด์ ๋ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์ธ์ฆ์ด ํ์ํ ๋ค์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค.
- ์์ ๋ฏธ๋์ด ๋ก๊ทธ์ธ: ์ฌ์ฉ์๊ฐ ์์ ๋ฏธ๋์ด ๊ณ์ (์: Facebook, Google)์ ์ฌ์ฉํ์ฌ ๊ฐ์ธ ์ ๋ณด๋ฅผ ์น์ฌ์ดํธ์ ์ง์ ๊ณต์ ํ์ง ์๊ณ ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ ์ ์๋๋ก ํฉ๋๋ค. ๋ธ๋ผ์ง ์ฌ์ฉ์๊ฐ FedCM์ ํตํด Google ๊ณ์ ์ ์ฌ์ฉํ์ฌ ํ์ง ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์ ๋ก๊ทธ์ธํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์.
- ๊ธฐ์ ๋จ์ผ ๋ก๊ทธ์ธ(SSO): ๊ธฐ์ ์ ์ ๊ณต๊ธ์์ ํตํฉํ์ฌ ์ง์๋ค์ด ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ค์์ค์ ๋ณธ์ฌ๋ฅผ ๋ ๋ค๊ตญ์ ๊ธฐ์ ์ FedCM์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๊ตญ๊ฐ(์: ์ผ๋ณธ, ๋ฏธ๊ตญ, ๋ ์ผ)์ ์ง์๋ค์ด ๊ธฐ์ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ๋ด๋ถ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค.
- ์ ์์๊ฑฐ๋ ํ๋ซํผ: ๊ณ ๊ฐ์ด ์ ํธํ๋ ์ ์ ๊ณต๊ธ์์ ์ ์ฅ๋ ๊ธฐ์กด ๊ฒฐ์ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์์ ํ๊ณ ๊ฐ์ํ๋ ๊ฒฐ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์บ๋๋ค์ ์จ๋ผ์ธ ์๋งค์ ์ฒด๋ FedCM์ ๊ตฌํํ์ฌ ํ๋์ค ๊ณ ๊ฐ์ด ํ๋์ค ์ํ์ ์ ์ ํ๋ซํผ์ ์ฌ์ฉํ์ฌ ์ํํ๊ณ ์์ ํ ๊ฒฐ์ ๊ฒฝํ์ ํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค.
- ์ ๋ถ ์๋น์ค: ์๋ฏผ๋ค์ด ๊ตญ๊ฐ ์ ์ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์ ๋ถ ์๋น์ค์ ์์ ํ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. ์์คํ ๋์์์๋ ์๋ฏผ๋ค์ด FedCM์ ํตํด e-๋ ์ง๋์ ์ ์ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ ๋์ ์ ๋ถ๊ฐ ์ ๊ณตํ๋ ์๋น์ค์ ์ก์ธ์คํ์ฌ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐ ๋ณด์์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ๊ฒ์ ํ๋ซํผ: ํ๋ ์ด์ด๊ฐ ๊ฒ์ ๊ฐ๋ฐ์์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๊ฒ์ ํ๋ซํผ ๊ณ์ (์: Steam, PlayStation Network)์ ์ฌ์ฉํ์ฌ ์จ๋ผ์ธ ๊ฒ์์ ๋ก๊ทธ์ธํ ์ ์๋๋ก ํฉ๋๋ค.
FedCM์ ํตํ ์ธ์ฆ์ ๋ฏธ๋
ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API๋ ํฅ์๋ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ, ๊ฐ์ ๋ ๋ณด์ ๋ฐ ๊ฐ์ํ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ฌ ์น ์ธ์ฆ์์ ์๋นํ ์ง์ ์ ์ด๋ฃน๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์ ๋ฐ IdP ์ฑํ์ด ๊ณ์ ์ฆ๊ฐํจ์ ๋ฐ๋ผ FedCM์ ์น์์ ์ฐํฉ ์ธ์ฆ์ ์ฌ์ค์ ํ์ค์ด ๋ ๊ฒ์ ๋๋ค.
FedCM์ ์ฑํํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋์ฑ ์์ ํ๊ณ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ์กด์คํ๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธ์ฆ ํ๋ฆ์ ๊ตฌ์ถํ์ฌ ์ฌ์ฉ์์์ ์ ๋ขฐ์ ์ฐธ์ฌ๋ฅผ ์ฆ์งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ค์ด ๋ฐ์ดํฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ถ๋ฆฌ์ ๋ํด ๋ ๋ง์ด ์ธ์ํจ์ ๋ฐ๋ผ, FedCM ์ฑํ์ ๊ณ ๊ฐ๊ณผ์ ๊ฐ๋ ฅํ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ธฐ์ ์๊ฒ ๋์ฑ ์ค์ํด์ง ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
ํ๋ฐํธ์๋ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ API๋ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ์ฆ ํ๋ฆ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์์น, ๊ตฌํ ์ธ๋ถ ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ FedCM์ ํ์ฉํ์ฌ ์ฌ์ฉ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๋ณดํธํ๋ฉด์ ์ํํ๊ณ ์์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์น์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ FedCM๊ณผ ๊ฐ์ ํ์ค์ ์ฑํํ๋ ๊ฒ์ ๋์ฑ ์ ๋ขฐํ ์ ์๊ณ ์ฌ์ฉ์ ์ค์ฌ์ ์ธ ์จ๋ผ์ธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํ ๊ฒ์ ๋๋ค. ์ง๊ธ FedCM์ ํ์ํ๊ณ ๋์ฑ ์์ ํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์น์ ์ ์ฌ๋ ฅ์ ์ด์ด๋ณด์ธ์.