OAuth 2.0

Martin Kim·2021년 9월 4일
0

잡다한 이야기

목록 보기
2/3

OAuth 2.0

OAuth에 대해 공부할 일이 생겨서 정리해보고자 한다.

  • OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.(위키백과)
  • 정의가 어렵긴 한데 소셜 로그인 생각하면 된다. (페북, 카카오, 네이버 로그인)
  • 사실 이런 OAuth를 쓰면 개발자 입장에서, 로그인 기능 구현에 힘을 빼지 않아도 되는게 장점인것 같다. 신뢰받는 큰 포털 사이트에게 로그인 기능을 인증을 위임할 수 있기 때문이다.
  • 총 4가지 방식이 있는데 비교적 안전한 방식인 Authorization Code 방식을 살펴보자

Authorization Grant

  • 페이코에서 제공한 OAuth2.0 Authorization Grant 방식 flow chart

  • 복잡하다. 이걸 어떻게 쉽게 흐름을 이해할까 고민했는데 사람을 대입해서 연극하듯이 생각해보니까 쉽게 이해가 되는것 같다.

    사용자: (서비스에게) 저 서비스 이용하려고 왔는데요
    서비스: (사용자에게) 오셨어요? 이거 당신에게 발급된 ClientID랑 Redirect_URI인데 가지고 인증 서버에게 가세요
    사용자: (인증 서버에게) 저 서비스한테 받아온 ClientID랑 Redirect URI인데 로그인 하려구요
    인증서버: (사용자에게) 로그인 페이지 여깄어요, 아이디랑 패스워드 입력하세요
    사용자: (인증 서버에게) 여기 아이디랑 패스워드요
    인증서버: (사용자에게) 오 로그인 되었구요 인증 코드 드릴게요
    사용자: (서비스에게) (Redirect_URI로) 여기 인증서버한테 받아온 인증코드요~
    서비스: (인증 서버에게) 저 이거 사용자가 인증코드 줬는데 이거 당신이 발급해준거 맞아요? 맞으면 제가 리소스 가져다 쓸 수 있도록 액세스 토큰 주세요
    인증서버: 네 확인해 보니 맞아요, 액세스 토큰 드릴게요
    서비스: (사용자에게) 로그인 되셨어요~
    사용자: (서비스에게) 감사합니다. 저 글 좀 보여주세요
    서비스: (리소스 서버에게) 사용자가 글 좀 보여달라고 해요, 액세스 토큰 여기있구요, 글 정보 좀 주세요
    리소스 서버: (서비스에게) 액세스 토큰 확인되었구, 글 정보 드릴게요
    서비스: (사용자에게) 글 받아왔어요~

  • 위 내용 외에도 권한 스코프 설정, 사용자에게 인증 확인 등의 절차가 있다.

  • 위 과정에서 액세스 토큰은 보안으로 인해 유효시간이 매우 짧게 설정되어서 이를 극복하려고 액세스 토큰을 발급할때 리프레쉬 토큰을 함께 주기도 한다. 이런 리프레쉬 토큰을 다시 보내면 액세스 토큰을 새로 발급해준다고 한다.

  • Authorization Code Grant 방식 외에도 Implicit Grant 방식, 이 있는데 위 방식에서 인증 코드 교환을 생략하고 과감하게 바로 액세스 토큰을 발급하는데 보통 2주? 정도로 길게 잡는다고 한다. 이 방식은 당연히 위 방식보다 보안이 약하다고한다. 요새 프론트엔드 대세인 SPA나, 네이티브 모바일앱에서 쓴다고 한다.

profile
학생입니다

0개의 댓글