본문 바로가기

좋아하는 것_매직IT/1.spring

33.Spring, 스프링 시큐리티(OAuth2 인증 사용)에 대한 간단한 구현을 직접 해보자.

반응형

블로그목적

스프링시큐리티의 OAuth2 인증을 공부하고 정리 및 간단한 구현을 통해서 공유한다.

 

OAuth2 프로토콜에 대해서 알아보자.

다양한 웹 지원 어플리케이션과 서비스 간에 권한 부여 및 인증정보를 교환하기 위해 사용하는 프로토콜

타사의 어플리케이션에서 구글, 페이스북, 깃허브 등등 서비스의 사용자 정보에 대한 액세스를 제한할 수 있음.

OAuth2 인증 관련 용어를 알아보자.

환경

신규 hellothub api 서비스를 타사 어플리케이션에 공개한다고 가정

자원 소유자

hellothub api 를 사용하려는 서드파티 어플리케이션 사용자를 말함.

자원 서버

보안 유지가 반드시 필요한 리소스인 hellothub api 서버를 말함.

클라이언트

api 를 사용하려면 타사 어플리케이션을 말함.

권한 부여 서버

OAuth 서비스를 제공하는 서버를 말함.

 

OAuth2 의 플로우를 간단하게 알아보자.

설명

1.자원소유자

아래내용을 클라이언트에게 제공함.

사용자 이름

비밀번호

2.클라이언트

자원소유자로부터 받은 아래내용을 권한부여서버로 제출하면서 접근 토큰을 요청함.

사용자 이름

비밀번호

3.권한부여서버

refresh 토큰과함께 access 토큰을 클라이언트에게 발급함.

4.자원서버

클라이언트는 API 호출 시 권한부여서버에서 받은 접근 토큰을 함께 전달함으로써 hellothub api 서비스를 제공받음.

 

그럼 OAuth2 로 간단한 인증을 구현해보자.

하나, 아래와 같이 의존성을 pom.xml (maven 기준) 에 추가하자

둘, Ouath2Application.java 파일에 간단하게 코딩을 한다.

1. 어노테이션 추가

현실에서는 자원서버 / 권한부여서버가 독립적으로 실행되고 있지만, 간단하게 구현을 위해서 동일한서버에서 자원서버 / 권한부여서버의 역할을 담당하게 위해서 아래 어노테이션을 추가함.

추가 어노테이션

@EnableResourceServer

OAuth2 자원서버에 대한 어노테이션

즉,OAuth2 토큰을 검증하는 보안 필터를 활성화해서 접근 토큰을 검증할 수 있게 해줌.

@EnableAuthorizationServer

권한부여서버에 대한 어노테이션

클라이언트 토큰을 저장하는 인메모리 저장소를 가진 권한 서버를 생성함.

AuthorizationEndpoint / TokenEndpoint 를 사용해 권한 부여 서버를 사용할 수 있게 해줌.

2. 간단한 콘트롤러 작성

HelloThubController

/hellothub 요청 처리

인증된 클라이언트에게 "Hello Thub."를 전송해줌.

아래는 전체 내용이다.

셋, 설정내용을 추가

application.properties 파일

설정 내용은 아래와 같음

사용자 이름

security.user.name

비밀번호

security.user.password

클라이언트 id

security.oauth2.client.client-id

클라이언트 secret

security.oauth2.client.client-secret

인증 grant 타입

security.oauth2.client.authorized-grant-types

 

그럼, Postman 을 사용해서 인증및 서비스 요청 테스트를 해보자

하나, 인증요청 및 토큰 획득

1. 아래와 같이 세팅후 인증 요청함.

2. 인증요청 완료 후 아래 응답값 수신 확인

설명

인증 요청을 통해서 아래 토큰을 발급 받음을 확인할 수 있음.

access_token

클라이언트는 액세스 토큰을 사용해서 API(예제에서는 hellothub api) 호출을 인증할 수 있음.

but, 해당 토큰은 일반적으로 매우 짧은시간 내에 만료됨.

refresh_token

클라이언트는 신규 access_token 을 얻기 위해서 refresh_token을 사용해서 인증서버에 요청할 수 있음.

둘, 서비스 요청

설명

Authorization 헤더에 인증 시 발급받은 access_token 을 값으로 첨부하여 전송하면 정상 서비스가 됨을 확인할 수 있음.

결론

OAuth2 는 다양한 웹 지원 어플리케이션과 서비스 간에 권한 부여 및 인증정보를 교환하기 위해 사용하는 프로토콜

아래, OAuth2 관련 용어를 기억해두자.

1.자원소유자

2.클라이언트

3.권한부여서버

4.자원서버

오늘도 OAuth2 관련 지식에 대한 직접 구현을 통해서 OAuth2 에 대한 정확한 지식 획득완료! 감사합니다.


오늘의 명언 한마디

사회적, 개인적으로 큰 성공을 거든 사람들은 충분히 풍족해진 이후에도 계속해서 일하고 생산하고 더 큰 성공을 일궈낸다.

세상 사람들은 놀라움과 의아한 시선으로 그들을 바라보면서 이렇게 질문한다.

"왜 이제 그만 쉬지 않고 계속 몰아붙이는 거죠?"

답은 간단하다, 새로운 무언가를 실현하기 위해서는 노력이 계속되어야 한다는 것을 그들은 알기 때문이다.

원하는 목적이나 목표를 위한 사냥이 중단되면, 성공의 사이클도 거기에서 끝나버림을 잘 알고 있기 때문이다.

그랜크 카돈 지음, "10배의 법칙" 중에서...


오늘의 영어 한마디

The climate here do not agree with me.

기후는 / 여기에 / 맞지 않아 / 나와

설명

즉, 기후에 대해서 나와 맞지 않음을 말하는 한마디임..^^


오늘의 민법 한마디

제2편 물권 / 제 1장 총칙

제187조(등기를 요하지 아니하는 부동산물권취득)

상속, 공용징수, 판결, 경매 기타 법률의 규정에 의한 부동산에 관한 물권의 취득은 등기를 요하지 아니한다.

그러나 등기를 하지 아니하면 이를 처분하지 못한다


오늘의 재무제표 공부 한마디

영업

생산 / 구매 / 판매 / 관리등의 총체적인 활동

영업이익

영업 활동을 통해서 벌어들인 이익

영업이익 = 매출 총이익 - 판매비와 관리비


목표

- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.

- 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기

- 나는 블로그 생태계에서 IT 테크관련 파워블로거및 인플루언서가 반드시 된다!

목표를 이루기 위한 실천방안

- 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.

- 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.

- "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."

- 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)

- 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.

- 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.

728x90
300x250