블로그목적
스프링시큐리티 관련 OAuth2에 대해서 공부및 정리후 공유한다.
OAuth2 란?
토큰 기반의 보안 인증과 인가 프레임워크
자격 증명을 공유하지 않고 애플리케이션이 사용자를 인증하고 인가할 수 있으며 다양한 매커니즘을 제공하는 유연한 인가 프레임워크
해당 인증 매커니즘을 인증 그랜트(authentication grant) 라고 함.
즉, OAuth2 는 토큰 기반의 보안 프레임워크이기 때문에 사용자는 자원에 접근하려는 어플리케이션을 통해 자제 증명을 제시하고 OAuth2 서버에서 인증함.
만약, 사용자의 자격증명이 유효할 경우,
OAuth2 서버는...
사용자 어플리케이션이 이용하는 서비스가 보호자원에 접근하려고 시도할 때마다 제시할 토큰을 제공함.
그리고, OAuth2 를 사용하면,
그랜트(grants)라는 인증 체계를 이용해 다양한 시나리오에서 REST 기반 서비스를 보호할 수 있음.
참고페이지
그럼, OAuth2 관련 구성 컴포넌트에 대해서 알아보자.
컴포넌트
보호자원(protected resource)
보호하려는 자원
적절한 권한을 부여받은 인증된 사용자만 액세스 할 수 있음.
자원소유자(resource owner)
서비스를 호출할 수 있는 어플리케이션 및 서비스에 접근할 수 있는 사용자.
서비스에서 수행할 수 있는 작업
자원 소유자가 등록한 어플리케이션은 식별 가능한 어플리케이션 이름 / 시크릿 키를 받음.
어플리케이션(application)
사용자를 대신해 서비스를 호출할 어플리케이션.
다시말해서, 사용자는 서비스를 직접 호출하지 않는 대신 어플리케이션에 의존해 작업을 수행함.
OAuth2 인증 서버(OAuth2 authentication server)
어플리케이션과 제공하는 서비스 사이의 중개자
즉 OAuth2 서버를 사용해서 어플리케이션이 사용자 대신 호출하는 모든 서비스에 사용자의 자격 증명을 전달하지 않고도 사용자 자신을 인증할 수 있음.
즉, 위의 4개의 컴포넌트는 서로 통신하고 사용자를 인증하게 됨.
단지, 다시말해서 사용자는 자격증명만 제시하면 됨.
인증성공시, 인증토큰을 기반으로...
그럼, 웹 서비스 보안을 잘 이해하려면?
아래 사항을 이해해야 함.
서비스를 호출할 대상
기업 망의 내부 사용자 / 외부 사용자
서비스를 호출하는 방법
기업 망 내부 웹 기반 클라이언트 / 모바일 장치
기업 망 외부의 웹 어플리케이션
코드에서 수행할 작업
그럼, OAuth2 에서 사용하는 그랜트(grants)를 알아보자.
패스워드(password) 그랜트
가장 직관적인 그랜트
어플리케이션 / 서비스가 서로를 명백하게 신뢴하는 경우 사용함.
연동구성도
설명
1.어플리케이션 소유자
OAuth2 서비스에 어플리케이션 이름을 등록하고 시크릿 키를 받음.
2.사용자
로그인 후 어플리케이션은 어플리케이션 이름 및 키를 포함한 자격 증명을 OAuth2 서비스에 전달함.
3.OAuth2 서비스
사용자와 어플리케이션을 인증하고, 엑세스 토큰을 제공함.
4.어플리케이션
사용자의 서비스 호출마다, 액세스 토큰을 첨부함.
5.서비스
OAuth2 서비스를 호출해 토큰 유효성을 검증함.
클라이언트 자격증명(client credential) 그랜트
일반적으로 어플리케이션이 OAuth2 보호 자원에 접근해야 할 때 사용함.
그리고, 트랜잭션 동안은 사람이 개입할 수 없음.
OAuth2 서버는 어플리케이션 이름과 자원소유자가 제공한 시크릿 키를 기반으로 인증함.
즉, 동일한 회사가 두 어플리케이션을 소유할 경우 사용됨.
연동구성도
설명
1.어플리케이션 소유자
데이터 분석 작업을 OAuth2 서비스에 등록함.
2.데이터 분석 어플리케이션
데이터 분석 작업이 실행되면, 어플리케이션은 어플리케이션 이름/키를 OAuth2 서비스에 전달함.
3.OAuth2 서비스
어플리케이션을 인증하고 액세스 토큰을 제공함.
4.데이터 분석 어플리케이션
모든 서비스 호출에 액세스 토큰을 첨부함.
5.서비스
OAuth2 서비스를 호출해 토큰 유효성을 검증함.
코드(authorization code) 그랜트
가장 복잡한 그랜트 타입.
사용자 자격증명을 어플리케이션간 공유하지 않고 다른 업체의 다양한 어플리케이션이 데이터와 서비스를 공유할 수 있기때문에 가장 널리 사용됨.
호출 어플리케이션이 즉시 OAuth2 액세스 토큰을 얻지 않고, "사전 접근"해 인가 코드를 확인하는 추가 단계가 필요함.
연동구성도
설명
1.magicsite 앱 소유자
magicsite 어플리케이션을 OAuth2 서비스에 등록하고, 시크릿 키와 함께 로그인한 후 magicsite.com 으로 돌아갈 콜백 URL을 얻음.
2. magicsite 앱 소유자
이름 / 시크릿 키 / OAuth2 로그인 페이지의 URL을 사용해 magicsite 어플리케이션을 구성함.
3. OAuth2 로그인 스크린(magicsite 앱 사용자)
로그인 페이지로 이동함.
인증된 사용자는 콜백 URL(인가코드)을 이용해 magicsite.com 으로 돌아감.
4.magicsite 어플리케이션
시크릿 키와 인가코드를 OAuth2 서비스에 전달하고 액세스 토큰을 얻음.
5.서비스
모든 서비스 호출에 액세스 토큰이 첨부되어 인입됨.
6.서비스
OAuth2 서비스를 호출해 엑세스 토큰의 유효성을 확인함.
암시적(implicit) 그랜트
클라이언트 어플리케이션이 웹 브라우저에서만 실행되고 제3자 서비스를 호출하는데, 서버 측 호출에 의존하지 않는 순수 자바스크립트 기반의 어플리케이션 or 모바일 어플리케이션일 경우 사용함.
즉, 사용자의 클라이언트가 직접 모든 서비스와 상호 통신함.
연동구성도
설명
1.자바스크립트 어플리케이션 소유자
어플리케이션 이름과 콜백 URL을 등록함.
2.사용자
OAuth2 서비스로 인증해야 하는 어플리케이션 사용자를 말함.
3.OAuth2 서비스
인증된 사용자를 콜백 URL(액세스토큰을 포함해 쿼리 매개변수)로 리다이렉션함.
콜백 URL
ex) http://javascript/app/callbackuri?token=sdfjljsdilj
4.자바스크립트 어플리케이션
액세스 토큰을 파싱하고 저장함.
5.자바스크립트 어플리케이션
모든 서비스 호출에 액세스 토큰을 첨부함.
6.서비스
OAuth2 서비스를 호출해 액세스 토큰의 유효성을 확인함.
결론
OAuth2 란, 토큰 기반의 보안 인증과 인가 프레임워크
OAuth2 관련 구성 컴포넌트는 아래와 같음.
보호자원(protected resource)
자원소유자(resource owner)
어플리케이션(application)
OAuth2 인증 서버(OAuth2 authentication server)
OAuth2 에서 사용하는 그랜트(grants)는 아래와 같음
패스워드(password) 그랜트
클라이언트 자격증명(client credential) 그랜트
코드(authorization code) 그랜트
암시적(implicit) 그랜트
오늘도 OAuhth2 관련 개념에 대한 지식 한가지 획득완료! 감사합니다.^^
오늘의 명언 한마디
기회는 누가 따주기를 바라며 나무에 매달려 있는 과일이 아니다.
비범한 가치를 인식하는 능력의 중심에는 다른 사람이 쓸데없고 불가능하고(혹은 상상하기 어렵고) 멍청해 보이는 것이 잠재적으로는 "가치있고 충분히 가능하며 똑똑한 것" 이라고 여기는 창업가의 역발상적인 신념이 자리잡고 있다.
다니엘 아이젠버그, "하버드 창업가 바이블" 중에서..
오늘의 영어 한마디
The boss had to tell me his war stories again.
또 시작됐다, 사장님의 공치사.
I know what you mean. They go on and on.
누가 아니래, 한 번시작하면 끝날 줄 모르는데.
설명
"war story" 는 "전쟁 이야기" 지만, 공치사 라고 해석할 수 있음.
한가지로 만 끝나지 않으면 복수형을 취함.
"I know what you mean." 은 네가 무슨 말을 하려는지 안다 라는 뜻
"go on" 은 계속하다.
"on and on" 은 "다음에서 다음으로" 라는 뜻.
오늘의 민법 한마디
제2편 물권 / 제 1장 총칙
제186조(부동산물권변동의 효력)
부동산에 관한 법률행위로 인한 물권의 득실변경은 등기하여야 그 효력이 생긴다.
그럼 영어로 변경하면, ^^;
Article 186 (Effect of Change in Real Property Rights) The change in real rights by legal act about real property requires recording to take effect.
오늘의 재무제표 공부 한마디
재고자산
원재료, 재공품, 제품등으로 인식되는 것.
목표
- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
- 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
- 나는 블로그 생태계에서 IT 테크관련 파워블로거및 인플루언서가 반드시 된다!
목표를 이루기 위한 실천방안
- 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
- 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
- "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
- 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
- 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
- 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
34.Spring, 스프링 시큐리티관련 JWT(JSON Web Token) 에 대해서 알아보자. (0) | 2021.02.06 |
---|---|
33.Spring, 스프링 시큐리티(OAuth2 인증 사용)에 대한 간단한 구현을 직접 해보자. (0) | 2021.02.06 |
31.Spring, 스프링 시큐리티(기본인증)에 대해서 알아보자. (1/2) (0) | 2021.02.06 |
30.Spring, 서비스의 문서화에 대한 필요성을 알아보고 간단한 샘플프로그램을 만들어 보자. (0) | 2021.02.06 |
29.Spring, 데이터 유효성체크에 대해서 알아보고 간단한 샘플프로그램을 만들어 보자. (0) | 2021.02.06 |