>백엔드 개발 >PHP 튜토리얼 >PHP 개발: Laravel Passport를 사용하여 OAuth2 서비스 제공자 구현

PHP 개발: Laravel Passport를 사용하여 OAuth2 서비스 제공자 구현

WBOY
WBOY원래의
2023-06-15 16:32:011575검색

모바일 인터넷의 인기로 인해 점점 더 많은 애플리케이션에서 사용자 인증 및 승인이 필요합니다. OAuth2는 이러한 기능을 구현하기 위한 표준화된 메커니즘을 애플리케이션에 제공하는 널리 사용되는 인증 및 권한 부여 프레임워크입니다. Laravel Passport는 PHP 개발자에게 OAuth2 인증 및 권한 부여를 위한 강력한 도구를 제공하는 사용하기 쉽고 안전하며 즉시 사용 가능한 OAuth2 서버 구현입니다. 이 글에서는 Laravel Passport를 사용하여 PHP 개발자가 OAuth2의 개발 및 적용을 더 잘 익힐 수 있도록 돕는 방법을 소개합니다.

  1. Laravel Passport 소개

Laravel Passport는 설치, 사용, 확장이 쉽고 신뢰할 수 있는 인증 및 권한 부여 메커니즘을 제공하는 완전한 OAuth2 서버 구현입니다. Passport는 JWT(JSON Web Token)를 사용한 토큰 서명 및 확인도 지원하며 RESTful API에서 매우 간단한 인증 기능을 제공합니다. 물론 Laravel Passport를 사용하여 OAuth2 서비스 제공자를 개발하기 위해서는 먼저 OAuth2에 대한 이론적 지식과 관련 기본 지식을 숙지해야 합니다.

  1. OAuth2 기본

OAuth2는 클라이언트 애플리케이션이 인증 서버를 사용하여 사용자가 인증한 리소스에 액세스할 수 있게 해주는 인증 프레임워크입니다. OAuth2는 사용자가 완전히 다른 서버에 저장된 정보에 액세스할 수 있도록 특정 리소스 서버(예: 이미지 서버 또는 파일 서버)에 대한 타사 클라이언트 애플리케이션에 권한을 부여할 수 있는 HTTP 기반 프로토콜로 설계되었습니다. OAuth2 프로토콜의 핵심 개념은 다음과 같습니다.

  • 클라이언트: 리소스 서버의 리소스(예: 파일)에 액세스해야 하는 애플리케이션입니다.
  • 리소스 소유자: 클라이언트가 리소스에 액세스하도록 권한을 부여할 수 있는 사용자입니다.
  • 인증 서버: 인증 서버는 클라이언트를 인증하고 인증에 성공하면 클라이언트에 액세스 토큰을 발급합니다.
  • 리소스 서버: 클라이언트에게 보호된 리소스를 제공하는 서버입니다.

OAuth2 사양은 개발자를 위한 여러 가지 인증 유형을 정의합니다. 이러한 인증 유형에는 다음과 같은 다양한 사용 시나리오가 있습니다.

  • 인증 코드: 가장 일반적으로 사용되는 인증 유형으로, 인증 코드 인증 유형을 사용하여 클라이언트는 사용자를 다음으로 리디렉션합니다. 인증 서버는 인증 코드를 반환하고 클라이언트는 인증 코드를 사용하여 액세스 토큰을 요청합니다.
  • 암시적 인증: 토큰이 브라우저 클라이언트의 주소 표시줄에 직접 배치될 때 서버 간 인증 코드 전송을 포함하지 않고 브라우저 클라이언트에 액세스 토큰을 제공하는 데 사용됩니다.
  • 클라이언트 인증: 클라이언트가 리소스 서버에 액세스할 수 있도록 인증하는 데 사용됩니다. 이때 인증 서버는 사용자 참여를 요구하지 않습니다.
  1. Laravel Passport 구현 OAuth2 서비스 공급자

OAuth2에 대한 기본 지식과 Laravel Passport에 대한 소개를 이해했으므로 이제 실습 단계에 들어가 Laravel Passport를 사용하여 OAuth2 서비스 공급자를 구현해 보겠습니다.

3.1. Laravel Passport 설치

Composer를 사용하여 Laravel Passport를 설치하고 터미널이나 명령줄 프롬프트를 열고 다음 명령을 입력할 수 있습니다:

composer require laravel/passport

Laravel Passport를 설치한 후 데이터베이스를 마이그레이션하는 명령을 실행해야 합니다. :

php artisan migrate

3.2. OAuth2 구성

Laravel Passport에서 "클라이언트"를 통해 액세스 토큰을 요청하고 리소스를 얻습니다. 시작하기 전에 몇 가지 클라이언트를 생성해야 합니다. Passport의 자체 명령인 Passport:client를 사용하여 클라이언트를 생성할 수 있습니다.

php artisan passport:client

이 명령은 생성된 클라이언트 ID와 비밀 키를 콘솔에 표시할 뿐만 아니라 클라이언트가 결정하는 클라이언트 유형(공개 또는 기밀)을 표시합니다. type 액세스 토큰이 생성되는 방법입니다.

다음으로, Passport를 인증 공급자로 사용하여 config/auth.php 파일에서 가드와 공급자를 구성합니다.

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

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class,
    ],
],

위 코드 조각에서는 api라는 이름의 "gatekeeper"만 활성화하고 이를 Passport 게이트키퍼(' 운전자' => '여권').

구성이 완료된 후 Passport 키를 다시 생성하고 다음 명령을 실행해야 합니다:

php artisan passport:keys

이 명령을 실행한 후 OAuth2 서비스 제공업체가 구성을 완료한 후 Laravel Card에서 OAuth2 액세스 토큰을 생성할 수 있습니다. .

3.3. OAuth2 액세스 토큰 생성

OAuth2를 사용하는 경우 API 엔드포인트를 보호하는 데 사용되는 액세스 토큰을 생성해야 합니다. Laravel Passort에서 OAuth2 액세스 토큰 생성은 매우 간단합니다. 보호해야 하는 경로에서 이에 대한 샘플 코드를 만들 수 있습니다:

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

이 경로는 auth:api 미들웨어를 사용하여 액세스 토큰을 확인하고 사용자에게 요청을 할당합니다.

  1. Postman을 사용하여 OAuth2 테스트

OAuth2 서비스 공급자와 액세스 토큰이 구성되면 Postman을 통해 테스트할 수 있습니다. Postman을 사용하여 사용자가 액세스 토큰을 얻을 수 있는지 또는 액세스 토큰을 사용하여 보호된 경로를 얻을 수 있는지 쿼리하는 GET 요청을 만들 수 있습니다. Postman에서 사용자는 보호된 경로에 액세스하려면 인증이 필요합니다. 다음은 샘플 코드입니다.

GET http://localhost:8000/api/user
Authorization : Bearer {access token}

이 샘플 코드에서는 GET 요청을 보내고 OAuth2 액세스 토큰을 사용하여 인증합니다. 모든 것이 순조롭게 진행되면 API는 요청된 보호 정보를 반환합니다.

  1. 요약

이 기사에서는 Laravel Passport의 사용을 소개했습니다. 이제 OAuth2 사양과 Passport를 사용하여 PHP 애플리케이션에서 안전하고 효율적인 인증 및 권한 부여 메커니즘을 만드는 방법을 익혔습니다. Passport를 사용하면 개발 복잡성이 줄어들고 개발 속도가 향상되므로 Laravel에서 RESTful API 및 모바일 애플리케이션을 구축하는 개발자에게 매우 유용합니다. 이 글이 PHP 개발자들에게 참고자료와 도움이 되기를 바랍니다.

위 내용은 PHP 개발: Laravel Passport를 사용하여 OAuth2 서비스 제공자 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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