상세 컨텐츠

본문 제목

Laravel 6.x Passport 적용

개발

by 목장주 2019. 10. 23. 14:46

본문

지난 글에서 Laravel 6.x에 Authentication을 적용했다. Authentication을 추가하면 로그인/가입 폼과 컨트롤러를 기본으로 추가해준다. 만약 API를 보호하고 싶다면 Passport를 패키지를 이용하면 좀 더 수월하게 할 수 있다. 본 포스팅은 Authentication 패키지가 설치되었다는 가정하에 Laravel 공식 문서를 기반으로 작성이 되었다.

 

Authentication과 Passport가 적용된 프로젝트를 Laravel Starter Pack 저장소에 공유해놓았다. 사용 방법은 Laravel Starter Pack 적용하기에 기술해 놓았으니 그 부분 부터 보면 된다. 공식 문서 순서대로 하나씩 적용하고 싶다면 직접 Passport 패키지 추가하기 부분을 참고하면 된다.

 

직접 Passport 패키지 추가하기

Passport 패키지 추가

 

$ composer require laravel/passport

 

데이터베이스 변경

Passport를 추가하면 vendor/laravel/passport/database/migrations에 데이터베이스 변경 파일이 생성된다. 이 파일을 데이터베이스에 적용 시켜줘야 한다.

 

$ php artisan migrate

 

HasApiToken Trait 추가

app/User.php를 다음과 같이 변경해준다.

 

...
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;
...

 

Passport::routes 실행 및 Implicit Grant 추가

Passport가 기본적으로 제공하는 /oauth/token 같은 경로를 활성화 해야한다. app/Providers/AuthServiceProvider.php를 다음과 같이 변경한다.

 

...
use Laravel\Passport\Passport;

public function boot()
{
    ...
    Passport::routes();
    Passport::enableImplicitGrant();
}

 

Client Credentials Grant 추가

Client Credentials Grant 타입을 활성화 하려면 미들웨어를 추가해 줘야 한다. app/Http/Kernel.php에 다음과 같이 추가한다.

 

...

use Laravel\Passport\Http\Middleware\CheckClientCredentials;

	...
    
    protected $routeMiddleware = [
		...
        ,
        'client' => CheckClientCredentials::class
    ];
    
    ...

 

driver 옵션 변경

app/config/auth.php에 token으로 되어있는 옵션을 passport로 변경해준다.

 

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

 

암호화 키 생성

Passport는 access token 생성을 위해 storage/oauth-*.key 파일들을 사용한다. 하지만 .gitignore는 해당 파일들을 저장소에 저장하지 못하도록 막고 있다. 따라서 본인의 프로젝트를 위한 암호화 키를 생성 시켜줘야 한다. 이를 위해 Passport는 3가지 방법을 제공한다.

 

  • passport:keys
  • passport:client
  • passport:install

passport:keys는 암호화 키를 생성한다. passport:client는 Personal Access Client 또는 Password Grant Client를 생성한다. passport:install을 두 가지를 동시에 다 해준다.

 

passport:install 명령어 사용을 권장한다.

 

$ php artisan passport:client

 

 

Laravel Starter Pack 사용하기 

Git 저장소 복사

아래의 명령어에서 YOUR-PROJECT-NAME만 원하는 프로젝트 폴더명으로 변경해 준다.

 

$ git clone git@github.com:myungcheol/laravel-starter.git YOUR-PROJECT-NAME

 

http를 이용할 경우

 

$ git clone https://github.com/myungcheol/laravel-starter.git YOUR-PROJECT-NAME

 

패키지 설치

composer.json에 있는 패키지들을 설치해준다.

 

$ composer install

 

데이터베이스 변경

Authentication과 Passport는 각각 사용하는 테이블이 있으므로 migration을 해준다.

 

$ php artisan migrate

 

암호화 키 생성

Passport는 access token 생성을 위해 storage/oauth-*.key 파일들을 사용한다. 하지만 .gitignore는 해당 파일들을 저장소에 저장하지 못하도록 막고 있다. 따라서 본인의 프로젝트를 위한 암호화 키를 생성 시켜줘야 한다. 이를 위해 Passport는 3가지 방법을 제공한다.

 

  • passport:keys
  • passport:client
  • passport:install

passport:keys는 암호화 키를 생성한다. passport:client는 Personal Access Client 또는 Password Grant Client를 생성한다. passport:install을 두 가지를 동시에 다 해준다.

 

passport:install 명령어 사용을 권장한다.

 

$ php artisan passport:client

 

Passport 테스트

직접 설치 또는 저장소 복사를 통한 설치를 마쳤다면 프로젝트를 실행시켜 보자.

 

$ php artisan serve

 

http://localhost:8000/register Register 폼을 이용하여 임의의 사용자를 한 명 만들어 둔다. 

 

passport:client 명령어를 사용했다면 Personal Access Client와 Password Grant Client가 oauth_clients 테이블에 생성되어 있다. 

 

위의 테이블을 보면 client 1은 Personal Access Client, client 2는 Password Grant Client로 설정되어 있다. client 2는 앞서 만든 임의의 사용자의 email과 password를 이용하여 access token을 발급 받을 수 있다. 

 

localhost:8080/oauth/token에 PUT 메소드로 다음과 같은 파라메타를 전송하면 된다.

 

{
    "grant_type": "password",
    "client_id": "2",
    "client_secret": "client-secret-for-client-2",
    "scope": "",
    "username" : "email@address.com",
    "password" : "password-for-email@address.com"
}

 

실제 전송 결과는 다음과 비슷하게 나온다.   access token, refresh token, 만료시간이 포함되어 있다. 

 

 

Client Credentials Grant Type 테스트 화면은 다음과 같다.

 

 

 

관련글 목록
Laravel 6.x Authentication
Laravel public folder를 public_html로 변경

'개발' 카테고리의 다른 글

zsh 터미널 환경 설정  (0) 2021.04.03
Laravel public folder를 public_html로 변경  (0) 2019.10.17
Laravel 6.x Authentication  (407) 2019.10.17
Plex에 Daum Movie Plugin 설치  (0) 2019.05.15
Install Docker on Ubuntu  (0) 2019.04.26

관련글 더보기