์ด ๋ฌธ์์์๋ reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์์ ๊ณ์ ๊ด๋ จ ์ฌ๊ธฐ ํ๋์ ๊ฐ์งํ๊ณ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
reCAPTCHA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๊ทธ์ธ ๋ฐ ๊ฒฐ์ ๊ฐ์ ์ค์ํ ์์ ์ ๋ณดํธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฏธ๋ฌํ ์ ํ์ ๊ณ์ ์ ์ฉ๋ ๋ง์ด ์กด์ฌํ๋๋ฐ, ์ด๋ฐ ํ๋์ ์ผ์ ๊ธฐ๊ฐ ๋์ ์น์ฌ์ดํธ์์ ํน์ ์ฌ์ฉ์์ ํ๋์ ๊ด์ฐฐํด์ผ ํ์งํ ์ ์์ต๋๋ค. reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ ์น์ฌ์ดํธ์์ ์์ฌ์ค๋ฌ์ด ์ฌ์ดํธ ํธ๋ ๋๋ ํ๋์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด ์ฌ์ดํธ๋ณ ๋ชจ๋ธ์ ์์ฑํจ์ผ๋ก ์ด๋ฌํ ์ ํ์ ๋ฏธ๋ฌํ ์ ์ฉ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ ์ฌ์ดํธ๋ณ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ค์์ ๊ฐ์งํ ์ ์์ต๋๋ค.
- ์์ฌ์ค๋ฌ์ด ํ๋
- ํ๋์ด ๋น์ทํ ๊ณ์
- ํน์ ์ฌ์ฉ์์๊ฒ ์ ๋ขฐํ ์ ์๋ค๊ณ ํ์๋ ๊ธฐ๊ธฐ์์ ๋ค์ด์ค๋ ์์ฒญ
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ ๋ฐ ์ฌ์ดํธ๋ณ ๋ชจ๋ธ์ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ฌ๊ธฐ ๊ณ์ ์ ํ ๋๋ ์ฌ์ฉ ์ค์ง
- ๊ณ์ ํ์ทจ ์๋ ๋ฐฉ์ง
- ์ฑ๊ณต์ ์ธ ๊ณ์ ํ์ทจ๋ก ์ธํ ํผํด ์ํ
- ์ ๋ฒํ ์ฌ์ฉ์ ๊ณ์ ์์ ์ ์ก๋ ์์ฒญ์๋ง ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
- ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ธฐ ์ค ํ๋์์ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์์ ๋ถํธ ๊ฒฝ๊ฐ
์์ํ๊ธฐ ์ ์
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ์นํ์ด์ง ๊ตฌ์ฑ
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ํจ๊ณผ์ ์ธ ๊ฐ์ง๋ฅผ ์ํด์๋ ๊ณ์ ํ๋์ ํฌ๊ด์ ์ผ๋ก ์ดํดํด์ผ ํฉ๋๋ค. reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ๊ณ์ ๊ด๋ จ ํ๋ ์ ๊ณต์ ์์ํ๊ณ ์ฌ์ดํธ๋ณ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฐ์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- ์ํ ์๊ฒฉ ๋ถ์ ๋ฐ์ดํฐ ์์ง ์ฌ์ฉ ์ค์
- ์ค์ํ ์ฌ์ฉ์ ์์ ๋ณด๊ณ
- ์ค์ํ ์ฌ์ฉ์ ์ด๋ฒคํธ ํ๊ฐ
- ์ฌ์ฉ์ ์ด๋ฒคํธ์ ์ฃผ์์ ์ถ๊ฐํ์ฌ ์ฌ์ดํธ๋ณ ๋ชจ๋ธ ์กฐ์
์ํ ์๊ฒฉ ๋ถ์ ๋ฐ์ดํฐ ์์ง ์ฌ์ฉ ์ค์
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๊ฑฐ๋ ๋ก๊ทธ์ธํ๋๋ก ์ ๋๋๋์ง์ ๊ฐ์ ์ฌ์ฉ์ ์์ ์ ๋ํ ์์ ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค. reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ๋ฐ๋ผ ์ํ ์๊ฒฉ ๋ถ์ ๋ฐ์ดํฐ์ ๋ํ ์๋ ์์ง์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ์ฌ์ฉ์ ์ํฌํ๋ก์ ํฌํจ๋ ๋ชจ๋ ์นํ์ด์ง์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ด์ ์ ๋ง๋ ์ ์ ๊ธฐ๋ฐ ์ฌ์ดํธ ํค๋ฅผ ์ฌ์ฉํด์ reCAPTCHA JavaScript ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํฉ๋๋ค.
๋ค์ ์์๋ ์นํ์ด์ง์์ reCAPTCHA JavaScript ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
<head> <script src="https://www.google.com/recaptcha/enterprise.js?render=KEY_ID"></script> .... </head>
์ค์ํ ์ฌ์ฉ์ ์์ ๋ณด๊ณ
์์ฌ์ค๋ฌ์ด ํ๋ ํจํด์ ๊ฐ์งํ๊ณ ์ฌ์ดํธ์์ ์ผ๋ฐ์ ์ธ ํ๋ ํจํด์ ๋ ํจ๊ณผ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ํด reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ ์ค์ํ ์ฌ์ฉ์ ์์ ์ ๋ํ ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ํ ์ฌ์ฉ์ ์์ ์์ grecaptcha.enterprise.execute()๋ฅผ ํธ์ถํ์ฌ ์นํ์ด์ง์์ ์ค์ํ ์ฌ์ฉ์ ์์ ์ ๋ณด๊ณ ํฉ๋๋ค.
์ถ๊ฐ์ ์ธ ์ ํธ ์์ง์ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ค์ํ ์ฌ์ฉ์ ์์
์ ๋ณด๊ณ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ณด๊ณ ํ๋ ค๋ ๋ชจ๋ ์ฌ์ฉ์ ์์
์ ๋ํด grecaptcha.enterprise.execute()
์ action
๋งค๊ฐ๋ณ์ ๊ฐ์ ์ฌ์ฉ์ ์์
์ ๊ธฐ์ ํ๋ ์์
์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
๋ค์ ํ์์๋ ์ค์ํ ์ฌ์ฉ์ ์์ ์ ๋ณด๊ณ ํ ๋ ์ฌ์ฉํ ์ ์๋ ์์ ์ด๋ฆ์ ๋ณด์ฌ์ค๋๋ค.
์์ ์ด๋ฆ | ์ฌ์ฉ์ ์์ ์ด๋ฒคํธ ๋๋ ์ฌ์ฉ์ ์์ |
---|---|
LOGIN |
์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํฉ๋๋ค. |
REGISTRATION |
์น์ฌ์ดํธ ๋ฑ๋ก. |
SECURITY_QUESTION_CHANGE |
๋ณด์ ์ง๋ฌธ ๋ณ๊ฒฝ์ ์์ฒญํฉ๋๋ค. |
PASSWORD_RESET |
๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ ์์ฒญํฉ๋๋ค. |
PHONE_NUMBER_UPDATE |
์ ํ๋ฒํธ ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํฉ๋๋ค. |
EMAIL_UPDATE |
์ด๋ฉ์ผ ์ฃผ์ ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํฉ๋๋ค. |
ACCOUNT_UPDATE |
์ฐ๋ฝ์ฒ ์ธ๋ถ์ ๋ณด์ ๊ฐ์ ๊ณ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋๋ก ์์ฒญํฉ๋๋ค. |
TRIGGER_MFA |
MFA ์ฑ๋ฆฐ์ง๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์์ ์ ๋๋ค. |
REDEEM_CODE |
์ฝ๋ ์ฌ์ฉ์ ์์ฒญํฉ๋๋ค. |
LIST_PAYMENT_METHODS |
๊ฒฐ์ ์๋จ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. |
๋ค์ ์์๋ ์ ํ๋ฒํธ ์
๋ฐ์ดํธ ์ grecaptcha.enterprise.execute()
๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
<script> function onClick(e) { e.preventDefault(); grecaptcha.enterprise.ready(async () => { const token = await grecaptcha.enterprise.execute('KEY_ID', {action: 'PHONE_NUMBER_UPDATE'}); }); } </script>
์ค์ํ ์ฌ์ฉ์ ์ด๋ฒคํธ ํ๊ฐ
์ฌ์ฉ์ ์์
์์ grecaptcha.enterprise.execute()
๋ฅผ ํธ์ถํ๋ฉด ํ ํฐ์ด ์์ฑ๋ฉ๋๋ค. ์ฑ๊ณต ๋ฐ ์คํจํ ๋ก๊ทธ์ธ, ๋ฑ๋ก, ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์์
๊ณผ ๊ฐ์ ์ค์ํ ์ฌ์ฉ์ ์ด๋ฒคํธ์ ๋ํด grecaptcha.enterprise.execute()
ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํ๋ ํ๊ฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฌํ ํ๊ฐ๋ ์ ์ฌ์ ์ธ ํ์ ํ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ๋ ์ฌ์ฉํ๋ ์ํ ํ์ ์ ์ ๊ณตํฉ๋๋ค. ์ํ ๊ฐ๋ฅํ ์์
์ค ์ผ๋ถ๋ ์์ฌ์ค๋ฌ์ด ์์ฒญ ์ฐจ๋จ, ์ํํ ๋ก๊ทธ์ธ ์๋, ๊ด์ฌ ๊ณ์ ์กฐ์ฌ์
๋๋ค.
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ก๊ทธ์ธ ์์ฒญ, ๋ก๊ทธ์ธํ ์์ฒญ, ๊ฐ์ ์์ฒญ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ํ๋์ ํน์ ๊ณ์ ์์ ๋ฐ์ํ ๊ฒ์ผ๋ก ํ์ธํ๊ธฐ ์ํด ์์ ์ ์ธ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๊ฐ ์ฌ์ฉ์ ํ๋ ํจํด์ ์ดํดํ๊ณ ๊ฐ ๊ณ์ ์ ํ๋ ๋ชจ๋ธ์ ๋น๋ํ์ฌ ๋น์ ์ ํธ๋ํฝ๊ณผ ์ ์์ ์ธ ํธ๋ํฝ์ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์งํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์์ฃผ ๋ณ๊ฒฝํ์ง ์๋ ์์ ์ ์ธ ๊ณ์ ์๋ณ์ accountId
๋ฅผ ์ ํํ๊ณ projects.assessments.create
๋ฉ์๋์ ํ๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์ด ์์ ์ ์ธ ๊ณ์ ์๋ณ์๋ ๋์ผํ ์ฌ์ฉ์์ ๊ด๋ จ๋ ๋ชจ๋ ์ด๋ฒคํธ์์ ๊ฐ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค. ๊ณ์ ์๋ณ์๋ก ๋ค์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์๋ณ์
๋ชจ๋ ๊ณ์ ์ ์์ ์ ์ธ ์ฌ์ฉ์ ์ด๋ฆ, ์ด๋ฉ์ผ ์ฃผ์ ๋๋ ์ ํ๋ฒํธ์ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ accountId
๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ต์ฐจ ์ฌ์ดํธ ์๋ณ์(์ฌ์ดํธ ๊ฐ์ ์ฌ์ฌ์ฉํ ์ ์๋ ์๋ณ์)๋ฅผ ์ ๊ณตํ๋ฉด reCAPTCHA๊ฐ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์
์ฉ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณ ํ๊ณ ์ด๋ฌํ ์๋ณ์์ ๊ด๋ จ๋ ๊ต์ฐจ ์ฌ์ดํธ ์
์ฉ ํจํด์ ๋ํ ์ง์์ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ฌ์ดํธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ๊ณ์ ๋ณดํธ๋ฅผ ๊ฐํํ ์ ์์ต๋๋ค.
๋๋ ๊ฐ ๊ณ์ ๊ณผ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ๋ด๋ถ ์ฌ์ฉ์ ID๊ฐ ์์ผ๋ฉด ์ด๋ฅผ accountId
๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
ํด์ฑ ๋๋ ์ํธํ๋จ
๊ฐ ๊ณ์ ์ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ๋ด๋ถ ์ฌ์ฉ์ ID๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ์ ์ธ ์๋ณ์๋ฅผ ์ฌ์ดํธ๋ณ ๋ถํ์คํ ๊ณ์ ์๋ณ์๋ก ์ ํํ ์ ์์ต๋๋ค. ์ด ์๋ณ์๋ reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๊ฐ ์ฌ์ฉ์ ํ๋ ํจํด์ ์ดํดํ๊ณ ๋น์ ์์ ์ธ ๋์์ ๊ฐ์งํ๋ ๋ฐ ํ์ํ์ง๋ง ๋ค๋ฅธ ์ฌ์ดํธ ๊ฐ์ ๊ณต์ ๋์ง๋ ์์ต๋๋ค.
reCAPTCHA์ ์ ์กํ๊ธฐ ์ ์ ์์ ์ ์ธ ๊ณ์ ์๋ณ์๋ฅผ ์ ํํ๊ณ ์ํธํ ๋๋ ํด์ฑ์ ์ฌ์ฉํ์ฌ ๋ถํ์คํ๊ฒ ๋ง๋ญ๋๋ค.
์ํธํ(๊ถ์ฅ): ์์ ์ ์ธ ์ํธ๋ฌธ์ ์์ฑํ๋ ํ์ ์ ์ํธํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ ์๋ณ์๋ฅผ ์ํธํํฉ๋๋ค. ์์ธํ ์๋ด๋ ํ์ ์ ์ผ๋ก ๋ฐ์ดํฐ ์ํธํ๋ฅผ ์ฐธ์กฐํ์ธ์. ํด์ฑ ๋์ ๋์นญ์ ์ํธํ๋ฅผ ์ ํํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์๋ณ์์ ํด๋น ๋ถํ์คํ ์ฌ์ฉ์ ์๋ณ์ ๊ฐ์ ๋งคํ์ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค. reCAPTCHA์์ ๋ฐํํ๋ ๋ถํ์คํ ์๋ณ์๋ฅผ ๋ณตํธํํ์ฌ ์ฌ์ฉ์ ์๋ณ์๋ก ๋ณํํฉ๋๋ค.
ํด์ฑ: SHA256-HMAC ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์ปค์คํ ์ํธ๋ก ๊ณ์ ์๋ณ์๋ฅผ ํด์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํด์๋ ๋จ๋ฐฉํฅ์ด๋ฏ๋ก, ์๋ ๊ณ์ ์ผ๋ก ๋ค์ ๋ฐํํ ์ ์๋ ํด์๋ ๊ณ์ ์๋ณ์๋ฅผ ๋งคํํ ์ ์๋๋ก ์์ฑ๋ ํด์์ ์ฌ์ฉ์ ์๋ณ์ ๊ฐ์ ๋งคํ์ ์ ์งํด์ผ ํฉ๋๋ค.
๋ชจ๋ ๊ณ์ ๊ด๋ จ ์์ฒญ์ ์์ ์ ์ธ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ ์ธ์๋ ์ผ๋ถ ํน์ ์์ฒญ์ ๋ถ์์ ํ ์ ์๋ ์ถ๊ฐ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
accountId
์ธ์ ์ ๊ณต๋๋ ์ปจํ
์คํธ๋ณ ๊ณ์ ์๋ณ์๋ reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๊ฐ ์ฌ์ฉ์ ํ๋์ ๋ ์ ์ดํดํ๊ณ ๊ณ์ ํ์ทจ ์๋๋ฅผ ๊ฐ์งํ์ฌ ์ฌ์ฉ์ ๊ณ์ ์ ์์ ํ๊ฒ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ถ๊ฐ ์๋ณ์๋ฅผ ์ ๊ณตํ๋ฉด reCAPTCHA๊ฐ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์
์ฉ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณ ํ๊ณ ์ด๋ฌํ ์๋ณ์์ ๊ด๋ จ๋ ๊ต์ฐจ ์ฌ์ดํธ ์
์ฉ ํจํด์ ๋ํ ์ง์์ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ฌ์ดํธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ๊ณ์ ๋ณดํธ๋ฅผ ๊ฐํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋ก๊ทธ์ธ ์์ฒญ์ ์ํด ๋ก๊ทธ์ธ ํธ๋ค๋ก ์ฌ์ฉ๋ ์ฌ์ฉ์ ์ด๋ฆ, ์ด๋ฉ์ผ ์ฃผ์ ๋๋ ์ ํ๋ฒํธ
๋ค์ค ์ธ์ฆ(MFA) ์์ฒญ์ ์ํด ์ธ์ฆ๋ ์ด๋ฉ์ผ ์ฃผ์ ๋๋ ์ ํ๋ฒํธ
๊ณ์ ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํ๋ ๋์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ด๋ฉ์ผ ์ฃผ์ ๋๋ ์ ํ๋ฒํธ(๊ธฐ๋ณธ ๋๋ ๋ณด์กฐ)
๋ฑ๋ก ์์ฒญ ์ค์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ด๋ฉ์ผ ์ฃผ์ ๋ฐ ์ ํ๋ฒํธ
์ ํํ ์์ ์ ์ธ ๊ณ์ ์๋ณ์๋ฅผ ๋ชจ๋ ๊ณ์ ๊ด๋ จ ์์ฒญ
projects.assessments.create
๋ฉ์๋์ accountId
๋งค๊ฐ๋ณ์์ ์ถ๊ฐํฉ๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ํ๊ฐ์์ userIds
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ์์ฒญ์ ์ถ๊ฐ ๊ณ์ ์๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- PROJECT_ID: Google Cloud ํ๋ก์ ํธ ID
- TOKEN:
grecaptcha.enterprise.execute()
ํธ์ถ์์ ๋ฐํ ํ ํฐ - KEY_ID: ์ฌ์ดํธ์ ์ฐ๊ฒฐ๋ reCAPTCHA ํค
- ACCOUNT_ID: ์น์ฌ์ดํธ์ ์ฌ์ฉ์ ๊ณ์ ์ ๋ํด ํด๋น ์ฌ์ฉ์ ๊ณ์ ๊ณผ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ์๋ณ์
- EMAIL_ADDRESS: (์ ํ์ฌํญ) ์ด ์์ฒญ๊ณผ ์ฐ๊ฒฐ๋ ์ด๋ฉ์ผ ์ฃผ์(์๋ ๊ฒฝ์ฐ)
- PHONE_NUMBER: (์ ํ์ฌํญ) ์ด ์์ฒญ๊ณผ ์ฐ๊ฒฐ๋ ์ ํ๋ฒํธ(์๋ ๊ฒฝ์ฐ)
- USERNAME: (์ ํ์ฌํญ) ์ด ์์ฒญ๊ณผ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ ์ด๋ฆ(์๋ ๊ฒฝ์ฐ)
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userInfo": { "accountId": "ACCOUNT_ID", "userIds": [ { "email": "EMAIL_ADDRESS" }, { "phoneNumber": "PHONE_NUMBER" }, { "username": "USERNAME" } ] } } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"
PowerShell
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "tokenProperties": { "valid": true, "hostname": "www.google.com", "action": "login", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.6, }, "event": { "token": "TOKEN", "siteKey": "KEY", "userInfo": { "accountId": "ACCOUNT_ID" } }, "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000", "accountDefenderAssessment": { "labels": ["SUSPICIOUS_LOGIN_ACTIVITY"] } }
์ฝ๋ ์ํ
Java
reCAPTCHA์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
์ค์ํ ์ฌ์ฉ์ ์ด๋ฒคํธ์ ์ํ ํ์ ํด์
๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๊ฐ ์ฌ์ฉ ์ค์ ๋ ํ๊ฐ๋ฅผ ๋ง๋ค๋ฉด ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๊ฐ ํ๊ฐ ์๋ต์ ์ผ๋ถ๋ก accountDefenderAssessment
๋ฅผ ๋ฐํํฉ๋๋ค.
accountDefenderAssessment
๊ฐ์ ์ฌ์ฉ์ ํ๋์ด ํฉ๋ฒ์ ์ธ์ง ๋๋ ์ฌ๊ธฐ์ธ์ง ํ๊ฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ํ ์ฌ์ฉ์ ์ด๋ฒคํธ์ ์ฃผ์์ ์ถ๊ฐํ ๋ ์ฌ์ฉํด์ผ ํ๋ ํ๊ฐ ID๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์ ์์๋ ์ํ JSON ์๋ต์ ๋๋ค.
{ "tokenProperties": { "valid": true, "hostname": "www.google.com", "action": "login", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.6, }, "event": { "token": "TOKEN", "siteKey": "KEY_ID", "expectedAction": "USER_ACTION" }, "name": "projects/PROJECT_ID/assessments/b6ac310000000000X", "accountDefenderAssessment": { labels: ["SUSPICIOUS_LOGIN_ACTIVITY"] } }
accountDefenderAssessment
ํ๋์๋ ๋ค์ ๊ฐ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๊ฐ | ์ค๋ช |
---|---|
SUSPICIOUS_LOGIN_ACTIVITY |
ํด๋น ์์ฒญ์ด ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ์ฑ์ฐ๊ธฐ ๋๋ ๊ณ์ ํ์ทจ์ ์ํ์ด ๋์์ ๋ํ๋ ๋๋ค. |
SUSPICIOUS_ACCOUNT_CREATION |
ํด๋น ์์ฒญ์ด ์ ์ฉ๋๋ ๊ณ์ ์ ๋ง๋ค ์ํ์ด ๋์์ ๋ํ๋ ๋๋ค. |
PROFILE_MATCH |
์ฌ์ฉ์ ์์ฑ์ด ์ด์ ์ ์ด ํน์ ์ฌ์ฉ์์ ํ์๋ ์์ฑ๊ณผ ์ผ์นํจ์ ๋ํ๋ ๋๋ค. ์ด ๊ฐ์ ์ด ์ฌ์ฉ์๊ฐ ์ด์ ์ ์น์ฌ์ดํธ์ ์ก์ธ์คํ๋ ๋ฐ ์ฌ์ฉํ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ธฐ์ ์์์ ๋ํ๋ ๋๋ค.
|
RELATED_ACCOUNTS_NUMBER_HIGH |
์์ฒญ์ ๊ด๋ จ ๊ณ์ ์ด ๋ง์์ ๋ํ๋ ๋๋ค. ๊ณ์ ์ด ๋ฐ๋์ ์๋ชป๋ ๊ฒ์ ์๋์ง๋ง ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค. |
์ด๋ฒคํธ์ ์ฃผ์์ ์ถ๊ฐํ์ฌ ์ฌ์ดํธ๋ณ ๋ชจ๋ธ ์กฐ์
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์ฌ์ดํธ๋ณ ๊ฐ์ง ๋ชจ๋ธ์ ๊ฐ์ ํ๋ ค๋ฉด ํ๊ฐ๋ฅผ ๋ง๋ค์ด์ ํ๊ฐํ ์ด๋ฒคํธ์ ์ฃผ์์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํ๊ฐ ID๋ฅผ ์ฌ์ฉํด์ projects.assessments.annotate
๋ฉ์๋์ ์์ฒญ์ ์ ์กํ์ฌ ํ๊ฐ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค. ์์ฒญ ๋ณธ๋ฌธ์ ํ๊ฐ์ ์ค๋ช
๋ ์ด๋ฒคํธ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ผ๋ฒจ์ ํฌํจํฉ๋๋ค.
ํ๊ฐ์ ์ฃผ์์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
-
์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ์์ฒญ JSON ๋ณธ๋ฌธ์ ์ถ๊ฐํ ์ ๋ณด ๋ฐ ๋ผ๋ฒจ์ ๊ฒฐ์ ํฉ๋๋ค.
๋ค์ ํ์๋ ์ด๋ฒคํธ์ ์ฃผ์์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ผ๋ฒจ๊ณผ ๊ฐ์ด ๋์ ์์ต๋๋ค.
๋ผ๋ฒจ ์ค๋ช ์์ฒญ ์์ reasons
ํ์ ํญ๋ชฉ. ํ๊ฐ๋ฅผ ์ง์ํ๋ ๋ผ๋ฒจ์ ๋๋ค. ์ค์๊ฐ ๊ฐ์ง์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ๋ฐ์ ํ ๋ช ์ด ๋๋ ๋ช ๋ถ ์ด๋ด์
reasons
๋ผ๋ฒจ์ ์ค์๊ฐ ์ด๋ฒคํธ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.๊ฐ๋ฅํ ๊ฐ ๋ชฉ๋ก์ ์ด์ ๊ฐ์ ์ฐธ์กฐํ์ธ์.
์์: ๊ณ์ ํ์ทจ๋ฅผ ๊ฐ์งํ๋ ค๋ฉด ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ
CORRECT_PASSWORD
๋๋INCORRECT_PASSWORD
๊ฐ์ ์ฌ๋ฐ๋ฅธ์ง ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค. ์์ฒด MFA๋ฅผ ๋ฐฐํฌํ ๊ฒฝ์ฐINITIATED_TWO_FACTOR
,PASSED_TWO_FACTOR
,FAILED_TWO_FACTOR
๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.{ "reasons": ["INCORRECT_PASSWORD"] }
annotation
์ ํ์ฌํญ. ํ๊ฐ ์ ๋ฒ์ฑ์ ๋ํ๋ด๋ ๋ผ๋ฒจ์ ๋๋ค. annotation
๋ผ๋ฒจ์์ ์ํ ํ๊ฐ๋ฅผ ๊ฒ์ฆํ๊ฑฐ๋ ์์ ํ๊ธฐ ์ํด ๋ก๊ทธ์ธ ๋ฐ ๋ฑ๋ก ์ด๋ฒคํธ์ ๋ํ ์ฌ์ค์ ์ ๊ณตํฉ๋๋ค.๊ฐ๋ฅํ ๊ฐ์
LEGITIMATE
๋๋FRAUDULENT
์ ๋๋ค.์ด ์ ๋ณด๋ ์ธ์ ๋ ์ง ๋๋ ์ผ๊ด ์์ ์ ํตํด ์ ์กํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค์๊ฐ ๊ฐ์ง์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ํ ๋ช ์ด ๋๋ ๋ช ๋ถ ์ด๋ด์ ์ด ์ ๋ณด๋ฅผ ์ ์กํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
{ "annotation": "LEGITIMATE" }
accountId
์ ํ์ฌํญ. ๊ณ์ ID๋ฅผ ์ด๋ฒคํธ์ ์ฐ๊ฒฐํ๋ ๋ผ๋ฒจ์ ๋๋ค.
๊ณ์ ID ์์ด ํ๊ฐ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๋ง๋ค ์ด ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ์ ๊ณ์ ID๋ฅผ ์ ๊ณตํฉ๋๋ค.
{ "accountId": "ACCOUNT_ID" }
์ ์ ํ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ฃผ์ ์์ฒญ์ ๋ง๋ญ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- ASSESSMENT_ID:
projects.assessments.create
ํธ์ถ์์ ๋ฐํ๋name
ํ๋ ๊ฐ์ ๋๋ค. - ANNOTATION: (์ ํ์ฌํญ) ํ๊ฐ๊ฐ ํ๋นํ์ง ๋๋ ํ์์ธ์ง๋ฅผ ๋ํ๋ด๋ ๋ผ๋ฒจ์ ๋๋ค.
- REASONS: ์ ํ์ฌํญ. ์ฃผ์์ ์ง์ํ๋ ์ด์ ์ ๋๋ค. ๊ฐ๋ฅํ ๊ฐ ๋ชฉ๋ก์ ์ด์ ๊ฐ์ ์ฐธ์กฐํ์ธ์.
- ACCOUNT_ID: ์ ํ์ฌํญ์ ๋๋ค. ์น์ฌ์ดํธ์ ์ฌ์ฉ์ ๊ณ์ ๊ณผ ๊ณ ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ์๋ณ์์ ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ฃผ์ ๋ผ๋ฒจ์ ์ฐธ์กฐํ์ธ์.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "annotation": ANNOTATION, "reasons": REASONS, "accountId": ACCOUNT_ID }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์
request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate"PowerShell
์์ฒญ ๋ณธ๋ฌธ์
request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate" | Select-Object -Expand Content์ฑ๊ณต ์ํ ์ฝ๋(2xx)์ ๋น ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- ASSESSMENT_ID:
์ฝ๋ ์ํ
Java
reCAPTCHA์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ ์ฌ์ฉ ์ค์
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ์นํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ํ์ reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
Google Cloud ์ฝ์์์ reCAPTCHA ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ์ด์ง ์๋จ์ ๋ฆฌ์์ค ์ ํ๊ธฐ์ ํ๋ก์ ํธ ์ด๋ฆ์ด ํ์๋๋์ง ํ์ธํฉ๋๋ค.
ํ๋ก์ ํธ ์ด๋ฆ์ด ํ์๋์ง ์์ผ๋ฉด ๋ฆฌ์์ค ์ ํ๊ธฐ๋ฅผ ํด๋ฆญํ ๋ค์ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
- ์ค์ ํด๋ฆญํฉ๋๋ค.
๊ณ์ ๋ฐฉ์ด ๋๊ตฌ ์ฐฝ์์ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
๊ณ์ ๋ฐฉ์ด ๋๊ตฌ ๊ตฌ์ฑ ๋ํ์์์์ ์ฌ์ฉ ์ค์ ์ ํด๋ฆญํ ํ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
reCAPTCHA ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ ์ฌ์ฉ ์ค์ ์ด Google ์์คํ ์ ์ ํ๋๋ ๋ฐ ๋ช ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ธฐ๋ฅ ์ฌ์ฉ ์ค์ ์ด Google ์์คํ ์ ์ ํ๋๋ฉด ํ๊ฐ์ ์ผํ์ผ๋ก ๊ณ์ ๋ฐฉ์ด ๋๊ตฌ์ ๊ด๋ จ๋ ์๋ต์ ๋ฐ์์ผ ํฉ๋๋ค.