-
[Spring] Spring Security OAuth2.0 인증 서버 구축 v0.1Spring 2021. 12. 1. 22:54728x90반응형
OAuth란
OAuth == Open Auth(Authentication 인증, Authorization 인가)
: 제3의 애플리케이션이 자원의 소유자인 서비스 이용자를 대신해 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법.
: 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 애플리케이션 상의 자신의 정보에 대해 웹사이트나 모바일의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는 인가를 위한 개방형 표준.
: 서비스별 제각각인 인증방식을 표준화한 인증방식
OAuth2.0을 구성하는 4가지 역할
Resource Owner 리소스 소유자 또는 사용자.
보호된 자원에 접근할 수 있는 자격을 부여해 주는 주체.Client OAuth2.0을 사용해 보호된 자원을 사용하려고 접근 요청을 하는 애플리케이션 Authorization Server 권한을 관리해 주는 서버.
클라이언트의 자격 접근 자격을 확인하고 Access Token을 발급하여 권한을 부여하는 역할Resource Server 사용자의 보호된 자원을 관리하는 서버.
Client는 Access Token을 이 서버에 전송하여 개인정보를 응답 받을 수 있음.OAuth2.0 토큰
Access Token
: 사용자의 데이터에 접근하기 위해 필요한 자격증명으로 특정 Client에 부여한 권한에 대한 정보가 담긴 문자열.
: Access Token이 노출될 리스크를 감안해 피해를 최소화하기 위해 일반적으로 Access Token을 짧게 설정.
Refresh Token
: Access Token의 유효기간이 만료되었을 경우, Refresh Token을 통해 Access Token을 재발급
: 유효기간이 존재. Access Token보다 긺.
토큰 발급 과정
클라이언트가 인증서버에게 Access Token 발급을 요청하면 인증서버는 Access Token과 Refresh Token을 동시에 발급.
만약 Access Token이 만료 시 인증 서버는 Access Token이 만료되었다는 에러를 반환하게 되고,
클라이언트는 Refresh Token으로 Access Token을 재발급받는다.
OAuth 2.0 인증 방식 종류
1. Authorization Code Grant (권한 부여 승인 방식)
: 클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용. 리소스 접근을 위한 사용자 명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 사용해 리소스에 대한 Access Token을 받는 방식.
2. Implicit Grant (암묵적 승인 방식)
: 권한 부여 코드 승인 방식과 유사하지만 차이점이 권한 코드 교환 단계 없이 Access Token을 즉시 반환해 이를 인증에 이용하는 방식.
3. Resource Owner Password Credentials Grant (자원 소유자 자격 증명 승인 방식)
: 클라이언트가 사용자 이름과 암호를 직접 Authorization Server에 전달하여 Access Token에 대한 사용자의 자격 증명을 교환하는 방식.
4. Client Credentials Grant (클라이언트 자격 증명 승인 방식)
: 클라이언트가 컨텍스트 외부에서 Access Token을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
1. Authorization Code Grant
Authorization Code Grant 방식은 권한 서버에 요청해서 받은 권한 코드를 전달하여 토큰을 발급받는 방식.
클라이언트가 사용자를 대신해 특정 자원을 접근할 때 사용되는 방식으로 주로 간편 로그인 기능에서 사용.
타사의 클라이언트에게 보호된 자원을 제공하기 위한 인증에 사용.
1. 클라이언트가 Client ID, Redirection URI, Response_type을 지정해 Authorization Server에 전달. 권한 서버는 정상적으로 인증이 되면 권한 부여 코드를 클라이언트에 전달.
2. 성공적으로 권한 부여 코드를 받은 클라이언트는 권한 부여 코드를 사용해 Access Token을 권한 서버에 추가로 요청. 필요한 파라미터는 Client ID, Client Secret, Redirection URI, Authorization_Code
3. 마지막으로 받은 Access Token을 사용해 리소스 서버에 사용자 데이터를 전송
2.Implicit grant
권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계 없이 Access Token을 즉시 반환받아 이를 인증에 이용하는 방식.
클라이언트가 웹브라우저에서 직접 통신을 하는 구조.
자격 증명을 안전하게 저장하기 힘든 클라이언트(ex Javascript 등의 스크립트 언어를 사용한 브라우저)에게 최적화된 방식
*스크립트 언어가 자격 증명을 안전하게 저장하기 힘든 이유 : 스크립팅 언어를 사용하면 공격자가 C&C 서버를 자주 변경함으로써 샌드박스로부터 의도를 숨길 수 있어 공격이 더욱 정교하고 치명적
AccessToken이 바로 전달되므로 만료 기간을 짧게 설정하여 누출의 위험을 줄일 필요가 있음.
Refresh Token 사용할 수 없는 방식이며 AccessToken을 획득하기 위한 절차가 간소화되기에 응답성과 효율성은 높지만, Access Token이 URL로 전달된다는 단점이 있음.
1) 클라이언트가 파라미터로 Client ID, Redirection URI, 응답 타입을 token으로 지정해 권한 서버로 전달. 보낸 파라미터로 정상적으로 인증이 되면 권한 부여 코드를 클라이언트에 전달.
2) 응답해 준 Access Token이 유효한지 검증 요청
3) 요청받은 Access Token 정보에 대한 검증에 대한 응답 값 정보를 돌려줍니다.
4) 유효한 Access Token 기반으로 Resource Server와 통신
3. Resource Owner Password Credentials Grant
간단하게 Resource 소유자의 username, password로 Access Token을 받는 방식.
자신의 서비스에서 제공하는 애플리케이션일 경우에만 사용되는 인증 방식.
Refresh Token의 사용 가능.
1) Username, Password를 통해서 자격 증명이 진행
2) 넘겨받은 정보 기반으로 권한 서버에 Access Token 정보를 요청
3) Access Token 정보를 응답 받음. 이때 Refresh Token 정보도 넘겨줄 수 있음
4) Access Token 기반으로 Resource Server와 통신
4.Client Credentials Grant
클라이언트의 자격 증명만으로 Access Token을 획득하는 방식.
OAuth2의 권한 부여 방식 중 가장 간단한 방식으로 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에서 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되면 사용.
이 방식은 자격 증명을 안전하게 보관할 수 있는 클라이언트에서만 사용되어야 하며, Refresh Token은 사용할 수 없음.
1) Access Token 정보를 요청
2) Access Token 정보를 응답하여 Access Token 기반으로 Resource Server와 통신
반응형
다음 글에서는 Spring Security OAuth2.0 라이브러리를 사용해 OAuth2.0 인증서버를 구축하는 과정에 대해 살펴볼 것이다.
https://blog.naver.com/mds_datasecurity/222182943542
https://cheese10yun.github.io/spring-oauth2-provider/728x90반응형'Spring' 카테고리의 다른 글
[Spring] Spring Security OAuth2.0 인증 서버 구축 v0.2 (0) 2021.12.07