>  기사  >  PHP 프레임워크  >  Laravel 개발: Laravel Sanctum을 사용하여 API 인증 및 권한 부여를 구현하는 방법은 무엇입니까?

Laravel 개발: Laravel Sanctum을 사용하여 API 인증 및 권한 부여를 구현하는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-13 19:07:182627검색

Laravel은 웹 애플리케이션의 개발 및 유지 관리를 단순화하는 많은 강력한 기능과 도구를 제공하는 인기 있는 PHP 웹 개발 프레임워크입니다. Laravel Sanctum은 무단 액세스로부터 API 엔드포인트를 쉽게 보호하기 위해 API 인증 및 권한 부여 기능을 제공하는 Laravel 프레임워크용 플러그인입니다.

이 글에서는 Laravel Sanctum을 사용하여 API 인증 및 권한 부여를 구현하는 방법을 알아봅니다.

1. 라라벨 생텀(Laravel Sanctum)이란 무엇인가요?

Laravel Sanctum은 간단하면서도 강력한 API 인증 및 권한 부여 기능을 제공하는 경량 인증 패키지입니다. 이는 Laravel 미들웨어 및 HTTP 인증을 기반으로 하므로 API 요청에 인증 토큰을 안전하게 연결할 수 있습니다.

Laravel Sanctum은 쿠키 기반 인증과 토큰 기반 인증의 두 가지 인증 방법을 지원합니다. 쿠키 기반 인증은 Laravel 미들웨어를 사용하여 요청에 유효한 인증 쿠키가 있는지 확인합니다. Header 클래스의 토큰을 확인하고 유효한지 확인하는 또 다른 방법입니다.

2. Laravel Sanctum 설치

시작하기 전에 먼저 Laravel Sanctum을 설치해야 합니다. Laravel Sanctum은 작곡가 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다:

composer require laravel/sanctum

물론, 작곡가.json 파일에 다음 요구 사항을 추가하여 수동으로 설치할 수도 있습니다:

{
  "require": {
    "laravel/sanctum": "^2.9"
  }
}

완료되면 다음 명령을 실행하여 Laravel을 게시합니다. Sanctum 구성 파일 및 데이터베이스 마이그레이션 파일:

php artisan vendor:publish --tag=sanctum-config
php artisan vendor:publish --tag=sanctum-migrations
php artisan migrate

3. Laravel Sanctum 구성

  1. 먼저 laravel/sanctum 미들웨어를 애플리케이션의 HTTP 코어에 추가해야 합니다.

app/Http/kernel.php 파일을 수정하고 Sanctum 미들웨어를 추가하세요:

// app/Http/Kernel.php

protected $middleware = [
    // ...
    LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,
];

protected $middlewareGroups = [
    'web' => [
        // ...
    ],

    'api' => [
        LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],
];

이렇게 하면 모든 요청 시 Sanctum의 쿠키 기반 인증을 사용할 수 있습니다.

  1. 다음으로 인증 구성 파일을 구성해야 합니다.

config/auth.php 파일을 열고 기본값과 가드를 찾아 sancttum을 사용하도록 구성하세요.

// config/auth.php

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
        'hash' => false,
    ],
],

이를 통해 Sanctum을 토큰 기반 인증에 사용할 수 있습니다.

  1. Sanctum 공급자를 추가하세요.

새 버전의 Laravel을 사용하는 경우 공급자를 추가할 필요가 없습니다. 이전 버전을 사용하는 경우 config/app.php 파일을 열고 공급자 배열에 다음 줄을 추가하세요:

LaravelSanctumSanctumServiceProvider::class,

IV. Create Authorization Token

이제 Laravel Sanctum을 구성했으므로 이에 대해 알아보겠습니다. 다음 Sanctum을 사용하여 인증 토큰을 만드는 방법.

  1. 사용자가 로그인한 후 사용자 테이블에 해당 사용자에 대한 API 토큰을 생성합니다.
public function createToken(Request $request)
{
    $user = Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')]);

    if($user) {
        $token = $user->createToken('API Token')->plainTextToken;
        
        return response()->json([
          'token' => $token,
        ]);
    } else {
        return response()->json([
          'message' => 'Invalid credentials',
        ], 401);
    }
}
  1. 토큰을 생성한 후 모든 요청의 Authorization 헤더에 추가할 수 있습니다. axios 요청에서 다음과 같이 설정할 수 있습니다:
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;

5. API 인증 및 승인 구현

인증 토큰을 생성한 후 Sanctum을 사용하여 무단 액세스로부터 API 엔드포인트를 보호할 수 있습니다. Laravel 라우팅 미들웨어를 사용하여 인증 토큰을 확인하고 무단 액세스를 거부할 수 있습니다.

  1. 먼저 api.php 파일에 보호된 API 경로를 정의하세요.
// routes/api.php

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

이 경로는 Sanctum 인증 미들웨어를 사용하여 보호됩니다.

  1. 다음으로 보호된 경로에 접속하여 결과를 확인하세요. 이는 다음 명령으로 테스트할 수 있습니다:
php artisan serve

이제 /api/user 경로에 액세스하여 로그인한 사용자의 세부 정보를 볼 수 있습니다. 이제 Authorization 헤더가 없으면 액세스할 수 없으며 401 Unauthorized HTTP 상태 코드가 반환됩니다.

6. Ending

Laravel Sanctum은 Laravel 웹 애플리케이션 및 웹 API에서 인증 및 권한 부여를 쉽게 구현할 수 있는 강력하고 사용하기 쉬운 인증 및 권한 부여 솔루션입니다. 무단 액세스로부터 API 엔드포인트를 쉽게 보호하고 어떤 사용자가 어떤 API 엔드포인트에 액세스할 수 있는지 쉽게 제어할 수 있습니다. 이 글에서는 Laravel Sanctum을 설치하고 구성하는 방법과 이를 사용하여 인증 토큰을 생성하고 API 인증 및 인증을 구현하는 방법을 살펴보았습니다.

위 내용은 Laravel 개발: Laravel Sanctum을 사용하여 API 인증 및 권한 부여를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.