OAuth & Social Login

프최's log·2020년 10월 30일
0

study

목록 보기
36/59
post-thumbnail

OAuth(Open Authorization, Open Authentication)

OAuth는 사용자와 서버 사이에서 인증을 중개해주는 역할을 가진 메커니즘으로, 제각각으로 분리된 인증방식을 통일한 표준화된 인증방식 이다.

간단히 말하자면, 사용자들이 개별 웹사이트마다 가입을 하지 않아도, OAuth 를 통해 권한 증서를 내어주면, OAuth가 각 웹사이트 계정에 접속할 수 있는 access token을 받아서 사용자에게 전달해준다. 그러면 사용자는 별도의 가입 없이 자기가 보유한 고유의 인증정보만으로 여러 사이트에 접근이 가능해진다.

단, OAuth는 인증(Authentication)을 다른 서비스에 맡길 뿐, 접근 권한 관리(Authorization)는 순전히 서버의 몫이다.

인증(Authentication)권한 부여(Authorization) 의 차이
인증은 '내가 누구인가'를 증명하는 것으로 '로그인' 과 같은 것이고, 권한 부여는 인증을 통해 로그인한 사람이 '일반 사용자'인지 '관리자'인지 구분하는 것이다. 이 권한 부여를 통해 로그인한 사람이 접근할 수 있는 범위가 결정된다.(관리자라면 관리자 페이지 접근이 가능한 것과 같은 것!)

OAuth 구성요소

  • Resource Owner(사용자=실 유저, 브라우저 등)

  • Authorization server(OAuth 인증 서버)

  • Resource Server(REST API)

  • Client(서버=앱)

  • RedirectURL ?
    OAuth 2.0 서비스가 응용 프로그램을 승인한 후 사용자를 반환하는 곳으로 반드시 등록되어야 한다. 그렇지 않으면 사용자 데이터를 도용할 수 있는 악성 응용 프로그램을 쉽게 만들 수 있다. 이 URL은 인증프로세스 중 가로칠 수 있는 행위의 코드를 막는 https 엔드포인트가 되어야한다.

  • state 매개변수 ?
    OAuth 2.0 서비스에 불투명한 문자열이므로 초기 권한 부여 요청 시 전달되는 상태 값은 사용자가 애플리케이션을 승인한 후 반환한다.

OAuth 2.0

OAuth 1.0a를 개선해서 나온 최신 기술로 Bearer 토큰 인증방식을 간편화 시켰다. 모바일 환경에서도 사용이 가능해졌고, HTTPS를 사용해 보안이 강화되었다(redirect URL). 거기에 접근토큰(Access Token) 만료기한 생겼다. 권한부여 서버를 분리함으로 인증서버를 확장시킬 수 있다.

Access Token(접근 토큰)

사용자(Resource Owner)로부터 받은 권한증서(Authorization Code/Authorization Code Grant)를 통해 부여받을 수 있는 인증키이다. 이 안에 계정 인증에 필요한 정보들이 문자열 형태로 표현되어있다.

Refresh Token(갱신 토큰)

만료가 된 Access Token 을 얻기 위해 사용되는 토큰으로 권한서버에서만 활용되는 인증키이다.(리소스 서버에는 전송X)

OAuth 4가지 인증 방식

  • Authorization coide grant
    • 페이지URL 표기 : response_type=code
  • lmplicit grant
    • 페이지URL 표기 : response_type=token
  • resource owner password credentials grant
    • 로그인 시, API 표기 : grant_type=password
  • client credentials grant
    • 로그인 시, API 표기 : grant_type=client_credentials

참고사이트
RFC6749 : The OAuth 2.0 Authorization Framework
OAuth 2.0, JWT
OAuth - 위키
쉽게 알아보는 서버 인증 3편(SNS 로그인, OAuth 2.0)
내 맘대로 OAuth 2.0 정리
OAuth 2.0 - 기본개념 및 Authorization Grant

profile
차곡차곡 쌓아가는 나의 개발 기록

0개의 댓글