프로토콜이란? 시스템 사이에서 데이터를 주고 받는 양식과 규칙의 체계이고 OAuth(Open Authorization)는 접근 위임을 위한 프로토콜의 일종이다.
내 서버 입장에서는 Third-Party Application을 통해 내 서버에 대해 접근을 위임하는 것이고
Third-Party Application 입장에서는 리소스 소유자를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 것이다.
OAuth2를 구성하는 4가지 역할
- Resource Onwer : 사용자
- Client : 나의 Application (나의 Application에서 서버와 클라이언트 둘 다 의미한다.)
- Authorization Server : 인증/인가를 수행하는 서버로 사용자는 Authorization Server에 ID, PW를 전송해 Client로 인가 코드를 발급 받을 수 있고 Client는 인가 코드를 Authorization Server에 요청해 Access Token을 발급받을 수 있다.
- Resource Server : 사용자의 보호된 자원을 호스팅하는 서버로 Client는 Token을 이 서버로 전송하고 사용자 자원을 받을 수 있다.
권한 부여 방식에 따른 프로토콜 4가지
1. Authorization Code Grant
기본이 되는 방식으로 ?response_type=code로 요청하면 Authorization Server에서 제공하는 로그인 페이지를 사용자에게 띄워준다. 사용자가 로그인을 성공하면 Authorization Server는 Client로 인가 코드를 반환한다. Client에서 인가 코드로 Authorization Server에 요청해 토큰을 얻고 Third-Party Application 사용자의 Resource를 획득한다.
2. Implict Grant
1의 방식에서 ?response_type=token으로 요청하고 인가 코드를 응답받지 않고 바로 토큰을 응답받는다. Access Token이 URL로 전달되므로 위험하다.
3. Resource Owner Password Credentials Grant
1의 흐름에서 Authorization Server가 로그인 팝업을 주는 과정이 생략됐다. ?grant_type=password로 username과 password와 함께 바로 토큰을 요청한다.
4. Client Credentials Grant
다른 정보없이 ?grant_type=client_credentials 로 요청한다. 권한이나 네트워크에 대한 사전 설정이 있는 상태에서 특정 Client에 대해 Authorization Server의 접근 권한을 열어 놓은 것으로 생각할 수 있겠다.
이미지 출처, 참고 블로그
https://blog.naver.com/mds_datasecurity/222182943542
'Web' 카테고리의 다른 글
HTTP 메서드 GET/POST 차이 (0) | 2023.09.06 |
---|---|
쿠키(cookie), 서버 <-> 클라이언트 set-cookie 에러 사항들 (0) | 2023.07.21 |
CORS (0) | 2023.07.20 |