인증과 인가. OAuth2.0

정선용·2022년 5월 7일
0

OAuth 2.0(Open Authorization 2.0, OAuth2) : 인증을 위한 open 표준 프로토콜
프로토콜은 통신규약.
OAuth는 인증을 위해 어떻게 통신할지를 표준화하고 , 공개한 방식이다.

구글, 페이스북, 카카오, 네이버 등에서 제공하는 간편 로그인 기능도 OAuth2 프로토콜 기반의 사용자 인증 기능을 제공한다. (SNS로그인)

Authentication은 인증으로, 접근 자격 이 있는지를 검증한다.
Authrozation은 인가로, 자원에 접근할 권한 이 있는지를 검증한다.
회원이 맞냐 아니냐는 인증해야하는것이고, 회원인데 이걸 볼 권한이 있는 회원인지를 검증하는 것이 인가.

인가 과정을 거치면 어떠한 자원에 접근할 권한인 'Access Token'이 주어지고, 보통 token기반의 통신은 만료 기간이 있다.
이 만료기한에 다다르면 이를 갱신해야 다시 접근이 가능한데, Refresh Token을 발행받아 토큰을 갱신 사용한다.

Authorization의 방식에는 크게 4가지정도로 프로토콜을 구분할 수 있는데,
권한 부여 승인 코드방식, 암묵적 승인 방식, 지원 소유자 자격증명 승인 방식,클라이언트 자격증명 승인 방식이 있다.

암묵적 승인 방식의 예시

플러스+ 카카오 이용하여 OAuth 2.0 이해하기

  • 왜쓰냐, 토큰기반 인증 장점 : 토큰을 사용하게 될 경우 별도의 저장소가 필요없다. Stateless
  • JWT : 인증에 필요한 정보들을 암호화 시킨 토큰.
    • Header : 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 저장한다.
    • Payload : 토큰에 담을 클라이언트에 대한 정보가 들어있다. 이를 클레임(claim)이라 하고 name-value 형태로 저장된다.
    • Signature : 해당 토큰이 조작되었거나 변경되지 않았음을 증명하는데 사용된다.
  • 동작과정
    1. 사용자가 어플리케이션을 통해 카카오 로그인을 수행하게 된다.
    2. 카카오 로그인 버튼을 누르면 카카오는 인가 코드를 미리 설정한 redirect_url 로 되돌려준다.
    3. 어플리케이션은 redirect_url를 통해 인가 코드를 얻고 이를 가지고 카카오 서버에 AccessToken 발급을 요청한다.
    4. 카카오는 인증 코드를 확인하여 토큰을 어플리케이션에 전달한다.
  • 카카오에서 인증,인가
    • 인증(Authentication) : ID와 비밀번호로 사용자 신원을 확인
      카카오 로그인은 각 서비스에 사용자가 카카오계정으로 로그인할 수 있는 기능을 지원
      서비스에서 각 사용자를 식별할 수 있는 고유한 회원번호 제공
    • 인가(Authorization) : 사용자 개인정보와 같은 자원(Resource)에 대한 접근 권한 획득
      카카오 로그인은 사용자 동의를 통해 사용자 정보나 기능에 대한 접근 권한을 서비스에 부여
      서비스에서 부여받은 권한은 카카오 로그인 시 발급되는 토큰에 부여되며, 토큰을 사용해 해당 사용자에 대해 다양한 카카오 API 요청 가능

  • 카카오에서 로그인(회원가입)
    • 서비스는 카카오 로그인을 완료하여 발급받은 토큰으로 사용자 정보 가져오기를 요청합니다.
    • 카카오 API 서버는 요청 시 사용된 토큰의 유효성을 검증하고, 요청을 처리하고 서비스에 응답합니다.
    • 서비스 서버는 카카오로부터 제공받은 사용자 정보로 해당 사용자가 서비스에 회원 가입되어 있는지 확인합니다.
    • 아직 회원 가입되지 않은 사용자: 카카오에서 제공받은 사용자 정보로 서비스 데이터베이스에 회원 가입 처리합니다. : 이후 자동 로그인 처리.
    • 서비스 서버는 서비스 클라이언트에 해당 사용자의 로그인에 대한 JWT를 발급합니다.
    • 서비스 클라이언트는 JWT을 전달받아 로그인 완료 처리하고, 사용자를 로그인된 서비스 화면으로 이동시킵니다.
profile
정선용

0개의 댓글