HTTP Basic
인증 방식의 문제- 네트워크를 통해 자격 증명이 자주 공유된다.
- 클라이언트가 자격 증명을 저장해 자격 증명을 서버로 보낼 수 있게됨.
- 여러 애플리케이션을 구성해야 할 경우 각 애플리케이션 별로 자격증명을 관리 해야함.
OAuth2
기존 인증 방식의 문제를 해결하기 위한
권한 부여 프레임워크
,권한 부여 프로토콜
OAuth2
의 구성요소리소스 서버
: 사용자가 소유한 리소스를 호스팅하는 서버.- 리소스는 사용자의 데이터나 사용자가 수행할 작업등이 될 수 있음.
사용자(리소스 소유자)
: 리소스 서버가 노출하는 리소스를 소유하는 개인. 사용자 이름과 암호로 신원 인증.클라이언트
: 사용자를 대신해 접근하는 어플리케이션. 클라이언트는 클라이언트 ID와 클라이언트secret
을 이용해 신원을 증명.- 여기서 말하는 자격 증명은 사용자 자격증명과 다름, 클라이언트의 자격을 증명하는 자체 증명이 필요
권한 부여 서버
: 클라이언트가 리소스 서버가 노출하는 사용자의 리소스에 접근할 권한을 부여하는 어플리케이션
클라이언트의 접근 권한이 있다고 판단되면 토큰을 발급, 클라이언트는 해당 토큰을 이용해 리소스 서버에 증명
최종적으로 클라이언트가 유효한 토큰이 있으면 해당 리소스에 접근 허용
OAuth2
를 사용한다는건 토큰을 이용하겠다는것. 해당 토큰을GRANT
라고 한다.GRANT 유형
- 승인 코드
- 암호
- 갱신 토큰
- 클라이언트 자격 증명
승인 코드 GRANT 구현
- 가장 보편적인 유형
인증 요청을한다.
⇒엑세스 토큰을 얻는다.
⇒보호된 리소스를 호출한다.
- 1단계
- 클라이언트는 사용자가 인증해야 하는 권한부여 서버의 엔드포인트로 사용자를 리디렉션.
- 세부정보를 포함된요청 쿼리로 엔드 포인트 호출
response_type
: 클라이언트가 코드를 기대한다는 것을 권한 부여 서버에 알리는code
값 필요client_id
: 애플리케이션 자체를 식별하는 클라이언트id
값redirect_uri
: 인증 성공 후 사용자를 리디렉션 할 위치를 담는다.scope
: 허가된 권한state
:csrf
보호를 위한 토큰 정의.
- 세부정보를 포함된요청 쿼리로 엔드 포인트 호출
- 보호된 리소스에 접근해야 함으로 권한부여 서버의 로그인 양식 페이지를 연다.
- 인증에 성공하면 리디렉션
uri
로 클라이언트 호출 후 코드와 상태 값을 제공. - 코드를 이용해 2단계로 엑세스 토큰을 얻는다.
- 클라이언트는 사용자가 인증해야 하는 권한부여 서버의 엔드포인트로 사용자를 리디렉션.
- 2단계
- 클라이언트는 토큰을 얻기 위해 코드를 이용해 권한 부여 서버를 호출한다.
- 권한 부여 서버를 호출할때 필요한 세부 정보
code
: 1단계에서 받은 승인코드, 인증받은 사용자임을 증명client_id 및 client_secret
: 클라이언트 자격 증명redirect_rui
: 리디렉션될uri
grant_type
: 인증 흐름 식별authorization_code
값을 가진다.
- 클라이언트가 리소스 서버에서 노출하는 리소스를 호출하는데 필요한
access_token
값을 반환 받음.
- 권한 부여 서버를 호출할때 필요한 세부 정보
- 클라이언트는 토큰을 얻기 위해 코드를 이용해 권한 부여 서버를 호출한다.
- 3단계
- 2단계에서 발급받은 토큰으로 보호된 리소스 호출