Spring Security OAuth 2

김병수·2022년 11월 30일
0
post-thumbnail

OAuth 2

OAuth 2는 특정 애플리케이션에서 사용자의 인증을 직접 처리하는 것이 아니라 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google, Facebook 등)에서 사용자의 인증을 대신 처리해 주고 Resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식이다. OAuth 2를 사용하는 애플리케이션은 써드 파티 애플리케이션에서 제공하는 API를 직접적으로 사용하거나, 추가적인 인증 서비스로 사용한다.

OAuth 2 인증 컴포넌트들의 역할

  • Resource Owner : 사용하고자 하는 리소스의 소유자. 구글 등의 서비스를 이용하는 사용자이다.

  • Client : Resource Owner를 대신해 보호된 Resource에 액세스하는 애플리케이션. 어떤 애플리케이션을 통해서 Google의 소셜로그인을 이용한다면 그 애플리케이션이 클라이언트가 된다.

  • Resource Server : 리소스를 제공하는 서버

  • Authorization Server : 클라이언트가 리소스 서버에 접근할 수 있는 권한을 부여하는 서버

OAuth 2 컴포넌트 간의 상호 작용을 통한 인증 처리 흐름

  1. Resource Owner는 Client 역할을 하는 웹 애플리케이션에게 OAuth2 인증을 요청한다.

  2. Client는 써드 파티 애플리케이션에 로그인 할 수 있도록 써드 파티 애플리케이션의 로그인 페이지로 리다이렉트한다.

  3. Resource Owner는 로그인 인증을 진행한다.

  4. 인증에 성공하면 Authorization Server가 Resource Owner의 로그인 인증이 성공적으로 수행되었음을 증명하는 Access Token을 Client에게 전송한다.

  5. Client는 Resource Server에게 Resource Owner 소유의 Resource를 요청한다.

  6. Resource Server는 Client가 전송한 Access Token을 검증해서 Client가 Resource Owner의 대리인으로써의 자격이 증명되면 Resource Owner의 Resource를 Client에게 전송한다.

OAuth 2 인증 프로토콜에서 사용되는 용어

  • Authorization Grant : Client 애플리케이션이 Access Token을 얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜(Credential). Client가 Access Token을 얻기 위한 수단이며 아래의 네 가지 Authorization Grant 타입이 있다.
  1. Authorization Code

  2. Implicit Grant Type

  3. Client Credentials

  4. Resource Owner Password Credentials

  • Access Token : Client가 Resource Server에 있는 보호된 Resource에 액세스하기 위해 사용하는 자격 증명용 토큰. Authorization Code와 Client Secret을 이용해 Authorization Server로 부터 전달 받은 Access Token으로 자격을 증명하면 Resource Server에 접근할 수 있다.

  • Scope : 주어진 액세스 토큰을 사용하여 액세스할 수 있는 Resource의 범위. Scope 설정을 통해 해당 Resource Owner의 사진첩에는 접근할 수 있지만, 연락처 등 다른 Resource에는 접근할 수 없도록 접근 권한을 지정할 수도 있다.

profile
BE 개발자를 꿈꾸는 대학생

0개의 댓글