본문 바로가기
프로그래밍/Web

Laravel Jetstream API

by 사악신 2024. 1. 6.

제트스트림은 라라벨 생텀(Laravel Sanctum)과의 first-party 통합을 포함합니다. 라라벨 생텀은 SPA(싱글 페이지 애플리케이션), 모바일 애플리케이션, 그리고 간단한 토큰 기반 API를 위한 경량 인증 시스템을 제공합니다. 생텀은 애플리케이션의 각 사용자가 자신의 계정에 대해 여러 API 토큰을 생성할 수 있게 해줍니다. 이 토큰들은 어떤 작업을 수행할 수 있는지 지정하는 능력/권한을 부여받을 수 있습니다.

 

 

기본적으로, API 토큰 생성 패널은 오른쪽 상단의 사용자 프로필 드롭다운 메뉴의 "API" 링크를 사용하여 접근할 수 있습니다. 이 화면에서 사용자는 다양한 권한을 가진 생크텀 API 토큰을 생성할 수 있습니다.

 

Enabling API Support

애플리케이션이 제3자에 의해 사용될 수 있는 API를 제공할 경우, 제트스트림의 API 기능을 활성화해야 합니다. 이를 위해 애플리케이션의 `config/jetstream.php` 설정 파일의 features 구성 옵션에서 관련 항목의 주석 처리를 해제해야 합니다:

'features' => [
    Features::profilePhotos(),
    Features::api(),
    Features::teams(),
],

Defining Permissions

API 토큰에 사용 가능한 권한은 애플리케이션의 `App\Providers\JetstreamServiceProvider` 클래스 내의 `Jetstream::permissions` 메소드를 사용하여 정의됩니다. 권한은 간단한 문자열로 정의됩니다. 정의되면 API 토큰에 할당될 수 있습니다:

Jetstream::defaultApiTokenPermissions(['read']);

Jetstream::permissions([
    'post:create',
    'post:read',
    'post:update',
    'post:delete',
]);

 

위 예제의 `defaultApiTokenPermissions` 메소드는 새로운 API 토큰을 생성할 때 기본적으로 선택되어야 하는 권한을 지정하는 데 사용할 수 있습니다. 물론 사용자는 토큰을 생성하기 전에 기본 권한을 해제할 수 있습니다.

Authorizing Incoming Requests

제트스트림 애플리케이션에 대해 이루어진 모든 요청, `routes/web.php` 파일 내의 인증된 경로로의 요청까지도, 생텀 토큰 객체와 연결됩니다. `Laravel\Sanctum\HasApiTokens` 트레이트에서 제공하는 `tokenCan` 메소드를 사용하여 관련 토큰이 주어진 권한을 가지고 있는지 확인할 수 있습니다.

이 `HasApiTokens` 트레이트는 제트스트림 설치 중 자동으로 애플리케이션의 `App\Models\User` 모델에 적용됩니다. 일반적으로, 이 `tokenCan` 메소드는 애플리케이션의 컨트롤러, Livewire 컴포넌트, 또는 인증 정책 내에서 호출됩니다:

 

return $request->user()->id === $post->user_id &&
       $request->user()->tokenCan('post:update')

 

First-Party UI Initiated Requests

사용자가 `routes/web.php` 파일 내의 경로로 요청을 할 때, 요청은 일반적으로 인증된 세션 쿠키 기반 가드를 통해 생크텀에 의해 인증됩니다. 대부분의 라라벨 애플리케이션에서는 이것이 웹 가드입니다.

사용자가 애플리케이션 UI를 통해 firt-party 요청을 하는 경우, `tokenCan` 메소드는 항상 true를 반환할 것입니다. 이것이 반드시 애플리케이션이 사용자에게 행동을 수행하도록 허용해야 한다는 것을 의미하지는 않습니다. 일반적으로, 정책은 토큰이 능력을 수행할 권한을 부여받았는지, 그리고 사용자 인스턴스 자체가 행동을 수행할 수 있도록 허용되어야 하는지를 확인할 것입니다.

예를 들어, 블로그 게시물을 업데이트하는 경우, 이것은 토큰이 게시물 업데이트를 허가받았는지 그리고 게시물이 사용자에게 속하는지 확인하는 것을 의미할 수 있습니다:

return $request->user()->id === $post->user_id &&
       $request->user()->tokenCan('post:update')

 

처음에는 `tokenCan` 메소드가 호출되어 first-party UI에서 시작된 요청에 대해 항상 true를 반환하는 것이 이상하게 보일 수 있습니다; 그러나 API 토큰이 항상 사용 가능하고 `tokenCan` 메소드를 통해 검사될 수 있다고 가정하는 것이 편리합니다. 이는 애플리케이션의 인증 정책 내에서 요청이 애플리케이션 UI에서 트리거되었는지 또는 API의 third-party 소비자 중 하나에 의해 시작되었는지에 대해 걱정하지 않고 항상 `tokenCan` 메소드를 호출할 수 있음을 의미합니다.

반응형

'프로그래밍 > Web' 카테고리의 다른 글

Laravel Jetstream Registration  (1) 2024.01.06
Laravel Jetstream Authentication  (0) 2024.01.06
Laravel Jetstream Teams  (0) 2024.01.06
Laravel Jetstream 시작하기  (0) 2023.12.27
라라벨 Fortify  (1) 2023.12.21

댓글