1. Spring Authorization Server
- OAuth 2.1 및 OpenID Connect 1.0 사양 및 기타 관련 사양의 구현을 제공하는 프레임워크
- Spring Security 위에서 동작
- Secure, Light-weight, Customizable
1.2. 구현
1.2.1. Authorization Server
gradle 파일(maven 파일)에 spring-security-oauth2-authorization-server 추가
SecurityFilterChain에 Bean으로 필터 체인, 클라이언트를 등록하거나 간단하게 applicaiton.yml파일 설정으로 Auth Server 설정 가능
```JSON plugins { id “org.springframework.boot” version “3.1.0” id “io.spring.dependency-management” version “1.1.0” id “java” }
Continue reading
1. OAuth 2 프레임워크
1.1. OAuth 2 프레임워크 란?
- 권한 부여 프레임워크(사양 프레임워크)
- 타사 웹사이트나 웹이 리소스에 접근할 수 있게 허용하는 것이 주 목적
1.1.1 등장 배경
기존 HTTP Basic 인증 방식의 문제점
- 모든 요청에 자격 증명을 보내야 한다 -> 네트워크를 통해 자격 증명이 자주 공유된다.
- 사용자의 자격 증명을 별도의 시스템이 관리한다
이러한 문제점들은 자격 증명을 취약하게 만들며 보안을 약화
자격 증명을 관리하는 책임을 시스템의 한 구성 요소에 격리할 수 있다면 어떨까? -> 권한 부여 서버 개념 등장
1.2. OAuth 2 인증 아키텍처의 구성 요소
- 리소스 서버 - 사용자가 소유한 리소스를 호스팅하는 서버, 리소스는 사용자의 데이터이거나 사용자가 수행할 수 있는 작업일 수 있다.
- 사용자(또는 리소스 소유자) - 리소스 서버가 노출하는 리소스를 소유하는 개인, 일반적으로 사용자는 사용자 이름과 암호로 신원을 증명한다.
- 클라이언트 - 사용자를 대신해 사용자가 소유한 리소스에 접근하는 애플리케이션, 클라이언트는 클라이언트 ID와 클라이언트 비밀을 이용해 신원을 증명한다.
- 권한 부여 서버 - 클라이언트가 리소스 서버가 노출하는 사용자의 리소스에 접근할 권한을 부여하는 애플리케이션
1.3. OAuth 2 구현 방법
- 승인 코드 가장 많이 이용되는 OAuth 2 흐름 중 하나
1. 인증 요청을 한다
클라이언트는 사용자가 인증해야 하는 권한 부여 서버의 엔드포인트로 사용자를 redircet
주로 권한 부여 서버의 로그인 양식이 있는 페이지를 연다.
사용자를 권한 부여 서버로 redirect할 때, response_type(코드), client_id, redirect_uri, scope, state 등의 세부 정보가 포함된 요청 쿼리로 권한 부여 엔드포인트 호출
인증에 성공하면 권한 부여 서버는 redirect_uri로 클라이언트를 다시 호출하고 코드와 상태 값을 제공
클라이언트는 상태 값이 요청에 보낸 것과 같은지 검사해 다른 사람이 리디렉션 URI를 호출하려는 것이 아닌지 확인
클라이언트는 승인 코드를 이용해 다음의 2단계로 액세스 토큰을 얻는다.
2. 액세스 토큰을 얻는다.
1단계에서 생성된 코드는 사용자가 리소스에 접근할 수 있도록 사용자가 인증했다는 클라이언트의 증명이다. -> 승인 코드 그랜트 유형
클라이언트는 토큰을 얻기 위해 코드로 권한 부여 서버를 호출
이 요청에는 code(1단계에서 받은 승인 코드), client_id, client_secret, redirect_uri, grant_type의 세부정보가 들어 있다.
서버는 이에 대한 응답으로 access_token을 반환한다.
클라이언트가 리소스 서버에서 노출하는 리소스를 호출하는 데 사용할 수 있는 값
3. 보호된 리소스를 호출한다.
권한 부여 서버에서 액세스 토큰을 받고 나면 이제 클라이언트는 보호된 리소스를 호출할 수 있다.
클라이언트는 리소스 서버의 엔드포인트를 호출할 때 권한 부여 요청 헤더의 액세스 토큰을 사용한다.
- 암호
- 갱신 토큰
- 클라이언트 자격 증명
Continue reading