์คํ๋ง ์ํ๋ฆฌํฐ๋ ๋ง๊ฐํ ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ์คํ๋ง ํ๋ ์์ํฌ์ด๋ค.
์ธ์ฆ์ด๋, ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋์์ ๋ํด ๋๊ตฌ์ธ์ง, ์์ ์ ์ํํด๋ ๋๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
์ธ๊ฐ๋, ์ธ์ฆ ์ดํ์ ํด๋น ๋ฆฌ์์ค์ ๋ํด ์ ๊ทผ ๊ฐ๋ฅํ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
๋ณด์๊ณผ ๊ด๋ จํด์ ์ฒด๊ณ์ ์ผ๋ก ๋ง์ ์ต์ ์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ๋ณด์ ๊ด๋ จ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋๋ค.
๊ตฌ๊ธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํด๋ณด์!
https://console.cloud.google.com/ ๋ก ์ ์ํด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
ํ๋ก์ ํธ๋ฅผ ์ ํํ ํ API ๋ฐ ์๋น์ค -> ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด
OAuth ํด๋ผ์ด์ธํธ ID ํด๋ฆญ!
๋์ ํ๋ฉด ์ค ์ธ๋ถ/๋ด๋ถ๊ฐ ์๋๋ฐ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ : ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ
์ง์ ์ด๋ฉ์ผ : ๋ณดํต ์๋น์ค์ help์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ค.
Google API์ ๋ฒ์ : ๊ตฌ๊ธ ์๋น์ค์์ ์ฌ์ฉํ ๋ฒ์ ๋ชฉ๋ก์ธ๋ฐ email, prorfile, openid๋ ๊ธฐ๋ณธ๊ฐ์ด๋ค
๋์ ํ๋ฉด ๋ง๋ค์์ผ๋ OAuth ํด๋ผ์ด์ธํธ ID ๋ง๋ค๋ฌ ๊ฐ์ผ ํ๋ค!
์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด - ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ง๋ค๊ธฐ - ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ ์์ฑํ๊ณ ' ์น์ธ๋ ๋ฆฌ๋๋ ์ URL ' ์ ์๋น์ค์์ ํ๋ผ๋ฏธํฐ๋ก ์ธ์ฆ ์ ๋ณด๋ฅผ ์ฃผ์์ ๋
์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด ๊ตฌ๊ธ์์ ๋ฆฌ๋ค์ด๋ ํธ ํ URL์ ์จ์ฃผ๋ฉด ๋๋ค.
์คํ๋ง ๋ถํธ 2 ๋ฒ์ ์ ์ํ๋ฆฌํฐ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก {๋๋ฉ์ธ}/login/oauth2/code/{์๋น์ค ์ฝ๋}๋ก ๋ฆฌ๋ค์ด๋ ํธ URL์ ์ง์ํ๊ณ ์์ผ๋ฏ๋ก Controller์์ ๋ง๋ค ํ์๊ฐ ์๋ค.
์ด์ resources์ application-oauth.properties๋ฅผ ๋ง๋ค์ด์
spring.security.oauth2.client.registration.google.client-id=ํด๋ผ์ด์ธํธ ID
spring.security.oauth2.client.registration.google.client-secret= ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ์ฝ๋
spring.security.oauth2.client.registration.google.scope=
์์ฑํด์ค๋ค. ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด์์ ๋ง๋ค์ด์ค ํด๋ผ์ด์ธํธ ID๋ฅผ ํด๋ฆญํ๋ฉด
ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ์ฝ๋๋ฅผ ์ ์ ์๋ค.
scope๋ ์๋น์ค์์ ์ฌ์ฉํ ๋ฒ์์ธ๋ฐ ๊ธฐ๋ณธ๊ฐ(profile, email, openid)์ด ์ ํด์ ธ ์์ง๋ง ๊ฐ์ ๋ก openid๋ฅผ ๋นผ๊ณ profile, email์ ๋ฑ๋กํ๋ค.
์๋ํ๋ฉด openid๋ฅผ Provider๋ก ์ธ์ํ์ฌ ๊ตฌ๊ธ ๋ง๊ณ ๋ค๋ฅธ ์๋น์ค๋ฅผ ๋๋ ์ ๊ฐ๊ฐ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ application.properties์ application-oauth.properties์ ์ค์ ๋ค์ ๊ฐ์ ธ์๋ณด์
์คํ๋ง ๋ถํธ๋ .properties์ ์ด๋ฆ์ apllication-xxx.properties๋ก ๋ง๋ค์๋ค๋ฉด xxx๋ก ๋ถ๋ฌ์ ํธ์ถํด์ค๋ค.
๋ฐฉ๊ธ ๋ง๋ค์๋ properties๋ฅผ
spring.profiles.include=oauth
์ด๋ ๊ฒ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
.gitignore ์ application-oauth.properties๋ฅผ ์ถ๊ฐํ๋ ๊ฑด ๊ผญ ์์ง ๋ง์!
์ด์ ํ๋ก์ ํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด
Entityํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋ค.
id, name, email, picture, role์ ๋ง๋ค์ด์ฃผ๋๋ฐ
role์ ํ์ ์ Role์ผ๋ก String๋์ Enum๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด๋ค.
2020/04/19 - [WEB/JAVA] - Java Enum์ด๋?
๋ง๋ค์ด์ค ํ CRUD๋ฅผ ์ฑ ์์ง Repository๋ ์์ฑํ๋ค.
Optional<User> findByEmail(String email);
์ด ๋ฉ์๋๋ ์์ ๋ก๊ทธ์ธ์ผ๋ก ๋ฐํ๋๋ ๊ฐ ์ค email์ ํตํด ์ด๋ฏธ ๊ฐ์ ํ๋์ง, ์ฒ์์ธ์ง ํ๋จํ ๊ฒ์ด๋ค!
์ด์ ์ํ๋ฆฌํฐ ์ค์ ์ ์ํด build.gradle์
compile('org.springframework.boot:spring-boot-starter-oauth2-client')
๋ฅผ ์ถ๊ฐํด์ค๋ค. ์์ ๋ก๊ทธ์ธ ๋ฑ ํด๋ผ์ด์ธํธ ์ ์ฅ์์ ์์ ๊ธฐ๋ฅ ๊ตฌํ ์ ํ์ํ ์์กด์ฑ์ด๋ค.
์ํ๋ฆฌํฐ ๊ด๋ จ ํด๋์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด configํจํค์ง๋ฅผ ์์ฑ ํ ๋ฐ์ authํจํค์ง๋ฅผ ์์ฑํด์ค๋ค.
์ด์ ์ํ๋ฆฌํฐ์ ๋ํด ๋์ฑ ์์ธํ ๊ณต๋ถํ ๊ฒ์ด๋ฏ๋ก ๋ค๋ฅธ ๊ฒ์๊ธ๋ก ๋์ด๊ฐ๊ฒ ๋ค!
'๐ WEB > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด๋ฏธ์ง ์ ๋ก๋ (Spring+Ajax) (1) | 2020.05.16 |
---|---|
์ธ์ ์ ์ฅ์ (0) | 2020.04.29 |
JPA Auditing ์ผ๋ก ์์ฑ/์์ ์๊ฐ ์๋ํํ๊ธฐ (0) | 2020.04.14 |
์ค์ ๋ก ์คํ๋ ์ฟผ๋ฆฌ์ ํํ (0) | 2020.04.10 |
Spring Data Jpa ์ ์ฉํ๊ธฐ 01.Entityํด๋์ค , Repository (0) | 2020.04.07 |