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

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

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

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

 

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

 

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

 

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
'๐ŸŒ WEB/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ (Spring+Ajax)
  • ์„ธ์…˜ ์ €์žฅ์†Œ
  • JPA Auditing ์œผ๋กœ ์ƒ์„ฑ/์ˆ˜์ •์‹œ๊ฐ„ ์ž๋™ํ™”ํ•˜๊ธฐ
  • ์‹ค์ œ๋กœ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ์˜ ํ˜•ํƒœ
์• ์ •์“ฐ
์• ์ •์“ฐ
์• ์ •์ฝ”๋”ฉ ๐Ÿ’ป์• ์ •์“ฐ ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์• ์ •์“ฐ
์• ์ •์ฝ”๋”ฉ ๐Ÿ’ป
์• ์ •์“ฐ
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (93)
    • ๐Ÿง  MIND (0)
    • ๐Ÿ“ ํšŒ๊ณ  (5)
    • โš™๏ธ ๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ (2)
    • ๐Ÿ—‚๏ธ DataBase (1)
      • QUERY (1)
    • ๐Ÿ’ป Computer Science (12)
    • ๐ŸŒ WEB (62)
      • HTML,CSS (0)
      • Kotlien (1)
      • JAVA (20)
      • JavaScript (3)
      • Spring (16)
      • Thymeleaf (2)
      • Node.js (1)
      • React (2)
      • SETTING (3)
      • JPA (11)
    • ๐Ÿœ TESTING (3)
    • ๊ธฐํƒ€ (4)
    • ์—๋Ÿฌ๋ชจ์Œ (4)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • 6์›”ํšŒ๊ณ 
  • ์„œ๋น„์Šคํ…Œ์ŠคํŠธ
  • null์ œ์™ธ
  • ์ž๋ฐ”
  • ๊ฐœ๋ฐœ์ž
  • rdsํŒŒ๋ผ๋ฏธํ„ฐ
  • JWT
  • ํšŒ๊ณ 
  • ๊ธฐ์ดˆ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Java
  • ๊ฐœ๋ฐœ์žํšŒ๊ณ 
  • ๋™์ ํ”„๋ก์‹œ
  • enum
  • Spring
  • Setting
  • ์ธํ„ฐ๋ทฐ
  • Til
  • ํŒŒ์ด์ฌ
  • ์ง๋ ฌํ™”
  • ์ฝ”ํ…Œ
  • spring-boot
  • ๋ฐฑ์ค€
  • Gson null
  • ArgumentCaptor
  • max_digest_length
  • QueryDSL
  • ๋ฉ”์„œ๋“œํ…Œ์ŠคํŠธ
  • JPA
  • XSSFWorkbook

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.1
์• ์ •์“ฐ
Spring Security , OAuth2.0์œผ๋กœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ 1
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.