라라벨 Passport 개념 정리

DSeung·2021년 4월 12일
0

Laravel 

목록 보기
1/9

시작하기에 앞서서

저는 그렇게 엄청난 내공을 지닌 개발자도 아니며 천지에 깔린 코더 나부랭이입니다.
그래도 도움이 될까 하여 제가 공부한 바를 정리해봅니다. 😊

Passport 개요

라라벨에서 API 인증을 위해 지원하는 공식 패키지입니다.
인증 없이 API를 요청시 401 에러코드를 발생하기 때문에 모든 요청에는 인증 값을 넣어야 합니다.
빠르게 OAuth2.0 기반으로 API 서버 구현을 할 수 있죠, 즉 OAuth2.0에 익숙하지 않는 사람들이 쉽게 OAuth2.0을 사용할 수 있게 지원해줍니다.
(참고로 8버전 부터 Vue 매니저 컴포넌트를 이용할 수 없습니다.)

OAuth2.0를 사용하지 않는 다면 Sanctum 패키지를 사용하길 권장합니다.

OAuth2.0 개요

네이버페이를 지원하는 쇼핑몰 사이트에서 네이버페이를 쓰신 적이 있으실 겁니다.
그러면 결제하기 위해 네이버페이를 클릭하면 네이버로 로그인이 뜨는 걸 본 적이 있을 겁니다.

이게 OAuth 2.0 입니다.

한 사이트에서 타 사이트에게 이 고객에 대한 정보를 안전하게 사용하는 방법으로
이때 고객은 기존 데이터를 사용하는 것이므로 타 사이트에 가입하지 않을 수 있어 보안적인 측면에서도 좋습니다.

이럴 수 있는 핵심 요소는 Access Token입니다.
네이버에 인증을 받았다는 증거로 사용되며 이 토큰을 request 해더에 넣어야지만 데이터를 받을 수 있습니다.
Access Token을 라라벨의 API에서 인증으로 사용하는 것입니다.

라라벨 API

라라벨에서는 다음과 같은 특징을 같는 API를 RESTful 하다고 정의하였습니다.

  • 고유한 URI로 자원을 조회한다.
    - ex) 13번 아이디를 가지는 강아지 -> /dog/13
  • HTTP 메서드를 사용해서 자원을 관리함.
    - ex) GET /dog/13, DELETE /dog/13
  • 상태를 가지지 않음, 세션을 통해 인증하지 않지만 모든 요청에는 인증 정보가 있어야 한다.
    - 이 점 때문에 토큰을 사용합니다.
  • 캐시할 수 있으며 누가 요청하든 항상 같은 결과를 반환해야 한다.
  • 반환 값은 Json이다.

Passport의 종류

Passport는 OAuth를 기반으로하는 2가지 방법과 자체 제공하는 2가지 방법으로 나뉩니다.
아래에서 언급하는 client_id, client_secret은 API 서버에서허용한 클라이언트 서버에게 발급하는 키 값입니다.

인가 코드 방식 (authorization code grant)

가장 자주 사용하는 방식으로 예시에서 든 방법입니다.

API를 요청하는 클라이언트 서버가 API 서버로 client_id, redirect_uri, grant_type을 code를 API 서버에게 요청하면 API 서버는 사용자에게 로그인을 요청합니다.
로그인이 성공하면 API 서버에서 지정한 리다이렉트 URI로 이동하고
이때 같이 오는 $request에 code 값이 들어있습니다.
이 code와 함께 client_ID, client_secret, redirect_uri로 API 서버에 요청하면 Access Token을 얻고 지정한 redirect uri로 옵니다.
이제 Access Token을 request 해더에 넣고 API 요청하면 됩니다.

비밀번호 승인 방식(password grant)

인가 코드 방식보다는 간단한 작동방식입니다, 보통 자체 애플리케이션에서 사용됩니다.
클라이언트 서버에서 사용자의 id, password와 client_id, client_secret을 보내서 데이터가 맞다면 Access Token을 얻습니다.
이제 Access Token을 request 해더에 넣고 API 요청하면 됩니다.

개인 접근 토근(personal access token)

개인 접근 토큰과 동기화 토큰은 OAuth2.0을 사용하지 않는 방식입니다.
이 방식은 API 테스팅 용으로 만들어져 아주 간단하게 사용이 가능합니다.

동기화 토근(synchronizer token)

이미 인증된 사용자가 요청하는 모든 값에 반환 값에 쿠키를 포함시켜줍니다.
이 쿠키는 암호화된 CSRF 토큰 정보를 포함하는 JWT 이며 이 쿠키 값으로 인증을 받습니다.



😊오타 및 피드백은 적극 환영입니다!

profile
<b>어.. 블로그에 주로 글을 쓰고 가끔 여기로 공유합니다</b>

0개의 댓글