OAuth

yshjft·2022년 2월 14일
0

Spring Security

목록 보기
4/6

✔︎ OAuth란

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준

✔︎ OAuth 용어

  • User(사용자)
    • 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인
    • 내가 개발한 서비스의 사용자들 (Resource Owner)
  • Consumer(소비자)
    • Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 어플리케이션
    • 내가 개발하는 서비스 (Client)
  • Service provider(서비스 제공자)
    • OAuth를 통해 접근을 지원하는 웹 어플리케이션
    • Google, Kakao, face book, apple (Resource Server)
  • Consumer Secret(소비자 비밀번호)
    • 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키
  • request token(요청 토큰)
    • 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다.
  • 접근 토큰(access token)
    • 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값

✔︎ OAuth 1.0

  • 구현 복잡
  • 어플리케이션(모바일)에 대한 지원 부족

✔︎ OAuth 2.0

  • 기능의 단순화
  • 규모의 확장
  • https가 필수
  • 암호화 https에 맡김
  • 인증 서버를 분리 할 수 있도록 함

✔︎ OAuth 2.0 인증 종류

  • Authorization Code Grant
    • 서버 사이드 코드로 인증하는 방식
    • 권한서버가 클라이언트와 리소스 서버간의 중재 역할을 한다
    • Access Token을 바로 클라이언트로 전달하지 않아 잠재적 유출을 방지
    • 로그인시에 페이지 URL에 response_type=code라고 넘긴다
    • Authorization Code은 일회성 값(access token 발급 이후에 바로 폐기), 노출되어도 크게 위험하지 않다
  • Implicit Grant
    • OAuth1.0과 가장 비슷한 인증방식
    • Public Client인 브라우저 기반의 어플리케이션(Javascript application)이나 모바일 어플리케이션에서 이 방식을 사용하면 된다.
    • OAuth 2.0에서 가장 많이 사용되는 방식이다.
    • 권한코드 없이 바로 발급되서 보안에 취약하다.
      • Access-Token이 URL에 노출되기 때문에 보안상 리스크가 있다.
      • 백엔드 서버가 없는 제한적인 환경에서만 사용을 권장한다.
    • 주로 Read only인 서비스에 사용.
    • 로그인시에 페이지 URL에 response_type=token 라고 넘긴다.
  • Password Credentials Grant
    • Client에 아이디/패스워드를 저장해 놓고 아이디/패스워드로 직접 access token을 받아오는 방식이다.
    • Client 를 믿을 수 없을 때에는 사용하기에 위험하기 때문에 API 서비스의 공식 어플리케이션이나 믿을 수 있는 Client에 한해서만 사용하는 것을 추천한다.
    • 로그인시에 API에 POST로 grant_type=password 라고 넘긴다
  • Client Credentials Grant
    • 어플리케이션이 Confidential Client일 때 id와 secret을 가지고 인증하는 방식이다.
    • 로그인시에 API에 POST로 grant_type=client_credentials 라고 넘긴다.
    • 서버간 통신에 사용한다.

✔︎ OAuth 2.0(Authorization code grant)의 요소

  • client
    OAuth 2.0을 사용해 서드파티로 로그인 기능을 구현할 자사 또는 개인 어플리케이션 서버

  • resource Owner

    • 서드파티 어플리케이션(Google, Facebook, Kakao 등)에 이미 개인정보를 저장(회원가입)하고 있으며 Client가 제공하는 서비스를 사용하려는 사용자
    • (Resource == 개인정보)
  • resource Server
    사용자의 개인정보를 가지고있는 어플리케이션(Google, Facebook, Kakao 등) 서버다. Client는 Token을 이 서버로 넘겨 개인정보를 응답 받을 수 있다

  • authorization Server

    • 권한을 부여해주는 서버
    • 사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받을 수 있다.
    • Client는 이 서버로 Authorization Code를 넘겨 token을 발급 받을 수 있다.

✔︎ 참고

profile
꾸준히 나아가자 🐢

0개의 댓글