๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ(oauth1110)์ ์ฝ๋์ ํจ๊ป ์์ธํ ์ ๋ฆฌํด๋๊ธด ํ์ง๋ง,
๋ธ๋ก๊ทธ์๋ ์ ์ฒด์ ์ธ ํ๋ฆ๋ง ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค.
๐ ๊ตฌ๊ธ API ์ฝ์์์ OAuth ํด๋ผ์ด์ธํธ ID ๋ง๋ค๊ธฐ
- ๊ตฌ๊ธ API ์ฝ์์ ์ ์ํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด -> ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ง๋ค๊ธฐ -> OAuth ํด๋ผ์ด์ธํธ ID๋ฅผ ๋ง๋ ๋ค.
- OAuth ํด๋ผ์ด์ธํธ ์์ด๋๋ฅผ ๋ง๋ค ๋ "์น์ธ๋ ๋ฆฌ๋๋ ์ URI"๋ฅผ ์ ๋ ฅํ๋ ์นธ์ด ๋จ๋๋ฐ,
๊ทธ ์นธ์ "http://{์๋น์คip}:{port}/login/oauth2/code/google" ์ ์ ๋ ฅํด์ค๋ค.
- ์ด URI๋ ์คํ๋ง๋ถํธ์์ ๊ตฌ๊ธ ์๋ฒ๋ก๋ถํฐ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธฐ ์ํด ๋ฆฌ๋ค์ด๋ ํธํ๋ URI๋ผ๊ณ ํ๋ค.
- OAuth ํด๋ผ์ด์ธํธ ID ์์ฑ์ด ์๋ฃ๋๋ฉด, ํด๋ผ์ด์ธํธID์ ๋น๋ฐ๋ฒํธ๊ฐ ์์ฑ๋๋ค.
- ์ด๊ฒ์ ๋ณต์ฌํด๋๋ค๊ฐ application.yml ์ค์ ํ์ผ์ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
๐ ์ธ๋ถ ์์กด์ฑ๊ณผ ์ค์ ์ถ๊ฐ
springboot starter๋ฅผ ํตํด Spring Security์ OAuth2 Client ์์กด์ฑ์ ์ถ๊ฐํด ์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ application.yml ์ค์ ์ ๋ค์์ ์ถ๊ฐํด์ฃผ์๋ค.
spring:
security:
oauth2:
client:
registration:
google:
client-id: {ํด๋ผ์ด์ธํธ ID}
client-secret: {ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ๋ฒํธ}
scope:
- email
- profile
๐ ๋ก๊ทธ์ธ ํ์ด์ง์ ๊ตฌ๊ธ๋ก ํ์๊ฐ์ ํ๊ธฐ ๋ฒํผ ์ถ๊ฐ
์๋ฒ ๋ก๊ทธ์ธ ํ์ด์ง์ "๊ตฌ๊ธ ํ์๊ฐ์ ํ๊ธฐ" ๋ฒํผ์ ์ถ๊ฐํ๋ค.
์ฌ์ฉ์๊ฐ "/oauth2/authorization/google" ๋ก GET ์์ฒญ์ ๋ณด๋ด๋๋ก ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ๋ฉด ๋๋ค.
(ํด๋น url์ ๋ํ ์ปจํธ๋กค๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ก ๊ตฌํํด์ค ํ์ ์๋ค.)
๐ ๊ตฌ๊ธ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ฅผ ํ์๊ฐ์ ์ํค๋ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ OAuth ์๋ฒ์์ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด, ๊ตฌ๊ธ ์๋ฒ๋ก๋ถํฐ ๋ฆฌ๋ค์ด๋ ์ ์๋ต๊ณผ ์ฝ๋๋ฅผ ๋ฐ๊ฒ ๋๋ค.
2. ์ฐ๋ฆฌ ์๋ฒ๋ ์ด ์ฝ๋๋ฅผ ๊ตฌ๊ธ ์๋ฒ๋ก ๋ณด๋ด๊ณ , ๊ตฌ๊ธ ์๋ฒ๋ก๋ถํฐ ์ก์ธ์ค ํ ํฐ์ ์๋ต๋ฐ๋๋ค.
3. ์ฐ๋ฆฌ ์๋ฒ๋ ์ด ์ก์ธ์ค ํ ํฐ์ ๋ค์ ๊ตฌ๊ธ ์ฌ์ฉ์ API๊ฐ ์๋ ์๋ฒ๋ก ๋ณด๋ด์ ์ฌ์ฉ์ ๊ตฌ๊ธํ๋กํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
4. ์ด ์ฌ์ฉ์ ๊ตฌ๊ธํ๋กํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ , ์ฐ๋ฆฌ ์๋ฒ ํ์๊ฐ์ ์ ์๋์ผ๋ก ์งํ์ํจ๋ค. (์์ด๋, ํจ์ค์๋๋ ์ฐ๋ฆฌ๊ฐ ์์๋ก ์ค์ ํ๋ค)
5. ๋ง์ฝ ์ฌ์ฉ์ ๊ตฌ๊ธ ํ๋กํ ์ ๋ณด ์ธ์ ์ถ๊ฐ๋ก ๊ฐ์ ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์์ผ ํ๋ค๋ฉด, ์ถ๊ฐ ์ ๋ณด ์ ๋ ฅ์ฐฝ์ ๋์์ฃผ์ด์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋๋ก ํ๋ค.
๐ ์ฌ์ฉ์ ๊ตฌ๊ธ ํ๋กํ ์ ๋ณด๋ ์ธ์ ์ ์ ์ฅ๋๋ค!
- ์คํ๋ง ์ํ๋ฆฌํฐ๋ก ๋ก๊ทธ์ธ ์ฑ๊ณตํ๋ฉด,
์ํ๋ฆฌํฐ ํํฐ ์ฒด์ธ์์ Authentication ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ํ๋ฆฌํฐ ์ธ์ ์ ์ ์ฅํ๋ค.
- Authentication ์ธ์คํด์ค๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
์ด ์ ์ ์ ๋ณด๋
(1) ์ผ๋ฐ ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ UserDetailsService์ loadUserByUsername() ๋ฉ์๋์ ์ํด UserDetails ํ์ ์ผ๋ก ์์ฑ๋๋ค.
(2) OAuth ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ DefaultOAuth2UserService์ loadUser() ๋ฉ์๋์ ์ํด OAuth2User ํ์ ์ผ๋ก ์์ฑ๋๋ค.
- ์ด ์ ์ ์ ๋ณด๋ getDetails() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฆฌํด๋ฐ์ ์ ์๋ค.
package org.springframework.security.core;
import java.io.Serializable;
import java.security.Principal;
import java.util.Collection;
public interface Authentication extends Principal, Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
Object getCredentials();
Object getDetails();
Object getPrincipal();
boolean isAuthenticated();
void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;
}
'๊ฐ์ธ ๊ณต๋ถ > WEB-Spring,SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ddl-auto ์ต์ (0) | 2024.11.19 |
---|---|
์ฉ๊ตฌํํ๋ ๊ตฌ๊ธ OAuth ์ธ์ฆ ํ๋ก์ ํธ์ Spring Security ์ ์ฉํ๊ธฐ (0) | 2024.11.18 |
[TIL] Spring Security, OAuth2 Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ์ง ์๊ณ ๊ตฌ๊ธ OAuth ํ์๊ฐ์ ๊ตฌํํ๊ธฐ (2) | 2024.11.17 |
[TIL] SpringSecurity ๊ธฐ๋ณธ ์ค์ ๊ณต๋ถํ๋ฉฐ ์๊ฒ ๋ ์ (1) | 2024.11.10 |
Spring Framework์ ๊ฐ์ฒด์งํฅ (0) | 2024.08.13 |