๐ŸŒ WEB/Spring

Spring Security , OAuth2.0์œผ๋กœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ 1

์• ์ •์“ฐ 2020. 4. 15. 19:46
์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ๋ง‰๊ฐ•ํ•œ ์ธ์ฆ๊ณผ ์ธ๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

์ธ์ฆ์ด๋ž€, ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•œ ๋Œ€์ƒ์— ๋Œ€ํ•ด ๋ˆ„๊ตฌ์ธ์ง€, ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด๋„ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

์ธ๊ฐ€๋ž€, ์ธ์ฆ ์ดํ›„์— ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

๋ณด์•ˆ๊ณผ ๊ด€๋ จํ•ด์„œ ์ฒด๊ณ„์ ์œผ๋กœ ๋งŽ์€ ์˜ต์…˜์„ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผ์ด ๋ณด์•ˆ ๊ด€๋ จ ๋กœ์ง์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•ด๋ณด์ž!

 

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ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

์ด์ œ ์‹œํ๋ฆฌํ‹ฐ์— ๋Œ€ํ•ด ๋”์šฑ ์ž์„ธํžˆ ๊ณต๋ถ€ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒŒ์‹œ๊ธ€๋กœ ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค!

๋ฐ˜์‘ํ˜•