(SpringBoot) 스프링부트 시큐리티(OAuth2)
SpringBoot
05/09/2021
🚀 스프링부트 시큐리티
스프링부트 프레임워크는 인증과 권한 기능인 스프링부트 시큐리티를 제공. 인증과 권한 처리를 편리하게 관리할 수 있다.
인증
: 사용자(클라이언트)가 특정 동작에 관하여 인증된 사용자인지 확인하는 절타. 간단하게 로그인기능이라고 보면 된다.권한 부여
: 데이터나 프로그램 등의 특정 자원이나 서비스에 접근할 수 있는 권한을 허용하는 것.
인증방식에는 전통적인 인증방식인 '크리덴셜 기반 인증방식(사용자명과 비밀번호로 인증)'과 OTP와 같은 '2중 인증 방식' 등이 있다. 그 중에서 소셜미디어를 사용해 인증하는 방식인 'OAuth2 인증방식' 에 대해 알아보자
🚀 OAuth2
OAuth2 는 OAuth 프로토콜의 버전2 이다. 서드파티를 위한 범용적인 인증 표준.
다음은 OAuth2에서 제공하는 승인타입이다.
권한 부여 코드 승인 타입(Authorization Code Grant Type)
: 클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용된다. 리소스 접근을 위한 사용자명과 비밀번호, 권한서버에 요청해서 받은 권한코드를 함께 활용하여 리소스에 대한 액세스 토큰을 받으면 이를 인증에 이용하는 방식.임시적 승인 타입(Implicit Grant Type)
: 권한 코드 교환 단계 없이 액세스 토큰을 즉시 반환받는 방식리소스 소유자 암호 자격 승인 타입(Resource Owner Password Credentials Grant Type)
: 클라이언트가 암호를 사용하여 액세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식클라이언트 자격 증명 승인 타입(Client Credentials Grant Type)
: 클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
이 중에 '권한 부여 코드 승인 타입'이 페이스북, 구글, 카카오 등의 소셜 미디어들이 웹 서버 형태의 클라이언트를 지원하는데 이 방식을 사용한다.
이는 장기 액세스 토큰(long-lived access token)을 사용하여 사용자 인증을 처리한다.
다음은 권한 부여 승인타입의 흐름을 순서대로 정리해보자
- 클라이언트가 파라미터로
클라이언트 ID, 리다이렉트 URL,응답 타입
을 code로 지정하여 권한 서버에 전달한다. 정상적으로 인증이 완료되면 권한부여코드를 클라이언트로 전송한다. 이 때 응답 타입이 token 일 때 암시적 승인 타입에 해당한다.- 권한부여코드를 받은 클라이언트는 권한 부여 코드를 사용하여 액세스 토큰(access token)을 권한 서버에 추가로 요청한다. 이때 필요한 파라미터는
클라이언트 ID(clien-id), 클라이언트 비밀번호(client-secret), 리다이렉트 URL,인증 타입
이다.- 응답받은 액세스 토큰을 사용하여 리소스 서버에 사용자의 데이터를 요청한다.
사용자명과 비밀번호로 인증하는 방식은 최소 한번의 요청만 하면 되지만, OAuth2 방식은 최소 세 번을 요청하게 된다. 하지만 OAuth2는 회원가입 없이 소셜미디어 계정을 통해 인증하기 때문에 사용자입장에서는 더욱 편리한 로그인 기능을 구현할 수 있다. 또한 회원가입 기능을 축소시키고 소셜에서 제공하는 User 정보를 가져올 수 있음.
references
- 처음 배우는 스프링부트 - 한빛미디어