이전에 OAuth 2.0에 대해서 정리하는 글을 올렸었다.
그렇다면 Spring 에서 OAuth를 어떻게 구현할까?
그게 바로 Spring Security인데 그것에 대해서 알아보고자한다.
OAuth와 Spring Security는 여러번 보았는데
볼때마다 헷갈리고 다시 공부하는 느낌이다
부디 이번에 조금이나마 더 정리되길 바라며,,, 포스팅 시작한닷..ㅁ7ㅁ8
1. OAuth란?
Open Authorization , Open Authentication ( Open 인증 , Open 인가) 로
자신의 애플리케이션 서버의 데이터를 다른 Third Party 에게 공유나 인증을 처리해줄 수 있는 오픈 표준 프로토콜이다
즉,,
내 서버의 어플리케이션에 접근 하려면 인증을 거쳐야 하는데,
이것의 표준이라고 생각하면 된다 ( 인증 & 인가)
이 개념이 궁금하면?
https://hyeonyeee.tistory.com/48
다음 포스팅을 참고하자.
2. Spring에서 OAuth 2.0?
OAuth가 오픈 표준 프로토콜이면 ,
Spring에서 OAuth를 구현하려면?
Spring Security를 쓰면된닷,,!
3. Spring Security
이제 어느 부분을 구현해보면 되는지 알아보자.
다행히 Spring에서는 많은 소스를 제공해준다
엄청 복잡하게 공부할 수도있지만 우선, 나는 간단하게,, 이해해보겠다.
5가지 Grant Type중
Resource Owner Password Credentials 방식으로 구현해보자.
여기서 크게 구현해야 될것은 세가지다.
1. AuthenticationProvider (Interface)
인증을 담당할 클래스를 구현
UserDetailServiceImpl에서 받아은 유저의 정보를 인증이 완료되면 Authentication 객체를 리턴해준다.
2. UserDetailService (Interface)
UserDetailService를 implements해서 custom UserDetailService를 만들어주어야한다.
user의 정보를 DB에서 받아온다.
3. Authentication Provider 추가하기
- SecurityConfig extends WebSecurityConfigurerAdapter
1번에서 만든 내가만든 인증 클래스를 ProviderManager에게 등록해주어야 한다.
참고)
HTTP Basic Auth
가장 기본적이고 단순한 형태의 인증 방식으로 사용자 ID와 PASSWD를 HTTP Header에 Base64 인코딩 형태로 넣어서 인증을 요청한다.
예를 들어 사용자 ID가 terry이고 PASSWD가 hello world일 때, 다음과 같이 HTTP 헤더에 “terry:hello world”라는 문자열을 Base64 인코딩을해서 “Authorization”이라는 이름의 헤더로 서버에 전송하여 인증을 요청한다.
Authorization: Basic VGVycnk6aGVsbG8gd29ybGQ=
중간에 패킷을 가로채서 이 헤더를 Base64로 디코딩하면 사용자 ID와 PASSWD가 그대로 노출되기 때문에 반드시 HTTPS 프로토콜을 사용해야 한다.
en.wikipedia.org/wiki/Basic_access_authentication
https://jeong-pro.tistory.com/205
https://minwan1.github.io/2018/03/11/2018-03-11-Spring-OAuth%EA%B5%AC%ED%98%84/
https://spring.io/guides/topicals/spring-security-architecture
'DEVELOP > Backend' 카테고리의 다른 글
[Spring] Async로 동작할때 Interceptor를 어떻게 탈까? (2) | 2020.06.11 |
---|---|
[Spring] Task 실행과 스케줄링 ( TaskExecutor , TaskScheduler) (0) | 2020.05.28 |
JPA이란? (전체적인 개념, 느낀점) (0) | 2020.05.18 |
Django에서 Swagger 적용 (drf-yasg 쓰기 꼭^^;) (0) | 2020.03.26 |
Django CORS 설정하기 (0) | 2020.03.26 |