2023. 3. 28. 07:50ㆍSpring
◎ OAuth2 인증 컴포넌트
-> Resource Owner
- 사용하고자 하는 리소스의 소유자를 의미한다.
- 구글 계정으로 로그인하여 구글의 서비스를 이용하는 사용자가 Resource Owner가 된다.
-> Client
- Resouce Owner를 대신해 보호된 리소스에 접근하는 애플리케이션이다.
- Client는 서버, 데스크 탑, 모바일과 같은 애플리케이션에 될 수 있다.
-> Resouce Server
- Client의 요청을 수락하고 Resouce Owner에게 해당하는 리소스를 제공하는 서버
- 어떤 애플리케이션에서 Google Photo에서 A라는 Resouce Owner의 사진을 가져올 떄 Google Photo 서비스를 제공하는 애플리케이션이 Resource Server다.
-> Authorization Server
- Client가 Resource Server에 접근할 수 있는 권한을 부여하는 서버
- Resource Owner가 인증에 성공하면 Authorization Server는 Client에게 Access Token 형태로 Resouce Owner의 리소스에 접근할 수 있는 권한을 부여한다.
1. Resouce Owner는 Client 역할을 하는 애플리케이션에 OAuth2 인증 요청을 한다.
2. Client는 Resouce Owner가 Resource Owner의 계정 정보를 관리하고 있는 서드 파티 애플리케이션에 로그인 할 수 있도록 서드 파티 애플리케이션의 로그인 페이지로 리다이렉트 한다.
3. Resource Owner는 로그인 인증을 진행한다.
4. 로그인 인증에 성공하면 Authorization Server가 Resource Owner의 인증이 성공적으로 수행되었음을 증명하는 Access Token을 Client에게 전송한다.
5. Client는 Resouce Owner의 대리인 역할을 수행하여 Resource Server에게 Resource Owner 소유의 리소스를 요청한다.
6. Resource Server는 Client가 전송한 Access Token을 검증하여 해당 Client가 Resource Owner의 대리인 자격이 증명되면 Resource Owner의 리소스를 Client에게 전송한다.
◎ OAuth2 인증 프로토콜에서 사용되는 용어
-> Authorization Grant
- Client 애플리케이션이 Access Token을 얻기 위한 Resource Onwer의 권한을 표현하는 크리덴셜을 의미
- Client가 Access Token을 얻기 위한 수단이다.
- Authorization Code / Implict Grant Type / Client Credentials / Resource Owner Password Credentials 가 있다.
-> Access Token
- Client가 Resoure Server에 있는 보호된 Resource에 접근하기 위해 사용하는 자격 증명 토큰
-> Scope
- 주어진 Access Token을 사용해 접근할 수 있는 Resouce 의 범위
◎ Authorization Grant 유형
▶ Authorization Code Grant : 권한 부여 승인 코드 방식
- 권한 부여 승인 위해 자체 생성한 Authorization Code를 전달하는 방식으로 가장 많이 쓰이는 방식이다.
- Refresh Token을 사용할 수 있다.
- 권한 부여 승인 요청 시 응답 타입을 code로 지정하여 요청한다.
1. Resource Owner는 로그인 요청 등의 서비스 요청을 Client 에 전송한다.
2. Client는 Authorization Server에 Authorization Code를 요청한다. 이때 미리 생성한 Client ID, Redirect URL, 응답 타입을 같이 보낸다.
3. Resoure Owner는 로그인 페이지를 통해 로그인을 진행한다.
4. 로그인이 확인되면 Authorization Server는 Authorization Code를 Client에게 전송한다.(Redirect URL로 코드 전달한다.)
5. Client는 전달 받은 Authorization Code로 Access Token 발급 요청한다. 이때 미리 생성한 Client Secret, Redirect URI, 권한 부여 방식, Authorization Code를 같이 전송한다.
6. 요청 정보 확인 후 Redirect URI로 Access Token을 발급한다.
7. Client는 발급 받은 Access Token으로 Resource Server에게 리소스를 요청한다.
8. Access Token 확인 후 요청받은 리소스를 Client에게 전달한다.
▶ Implict Grant : 암묵적 승인 방식
- 별도의 Authorization Code 없이 바로 Access Token을 발급하는 방식
- 자격증명을 안전하게 저장하기 어려운 Client에게 최적화된 방식
- Refresh Token 사용이 불가하고 이 방식에서 Authorization Server는 Client Secret을 통해 클라이언트 인증 과정을 생략한다.
- 권한 부여 승인 요청 시 응답 타입을 token으로 지정하여 요청한다.
▶ Resource Owner Password Credential Grant : 자워 소유자 자격 증명 승인 방식
- 로그인 시 필요한 정보(username, password)로 Access Token을 발급받는 방식. 자신의 서비스에서 제공하는 애플리케이션의 경우에만 사용하는 방식이며 Refresh Token 사용이 가능하다.
- 네이버 계정으로 네이버 블로그에 로그인 하는 방식이 여기에 해당한다.
- Authorization Server, Resoure Server, Client가 모두 같은 시스템에 속해 있는 경우에만 사용 가능하다.
▶ Client Credentials Grant : 클라이언트 자격 증명 승인 방식
- Client 자신이 관리하는 리소스나 Authorization Server에 해당 Client를 위해 제한된 리소스 접근 권한이 설정되어 있는 경우 사용하는 방식
- 자격 증명을 안전하게 보관할 수 있는 Client에서만 사용해야 하고, Refresh Token은 사용할 수 없다.
'Spring' 카테고리의 다른 글
@WebMvcTest (0) | 2023.05.01 |
---|---|
@ExtendWith(MockitoExtension.class), @Mock, @InjectMocks, @MockBean (0) | 2023.04.30 |
OAuth2 (0) | 2023.03.28 |
JWT (0) | 2023.03.20 |
토큰 기반 자격 증명 (0) | 2023.03.20 |