포스트

OAuth2를 알아보자

OAuth2를 알아보자

이 글은 Tistory에서 이전된 포스팅입니다. 원본은 여기에서 확인할 수 있습니다.

OAuth(Open Authorization)는 접근 위임을 위한 프로토콜의 일종이다.

내 서버 입장에서는 Third-Party Application을 통해 내 서버에 대해 접근을 위임하는 것이고

Third-Party Application 입장에서는 리소스 소유자를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 것이다.

구성 역할

  • 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

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.