ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Laravel 6.x Passport 를 이용한 API인증
    Technique/PHP 2020. 1. 23. 13:12
    반응형
    기본적으로 레퍼런스 사이트에 나와있는 방법을 참고하였으며, 보면서 이해가 안되는 부분은 여기저기 검색해가면서 만든걸 바탕으로 작성합니다.

    전재조건

    • 레퍼런스를 참고하여 coposer 를 이용한 어플리케이션 설치
    • 레퍼런스를 참고하여 기본 인증/마이그레이션에 성공
    • /register를 이용하여 1개 이상의 아카운트 작성을 마친 상태
    1. composer 를 이용하여 passport 를 도입

      composer require laravel/passport
    2. migrate 실행

      php artisan migrate
    3. HashApi trait를 추가
      app/User.php 파일에 아래이 내용을 추가

    use Laravel\Passport\HasApiTokens;
    
    class User extends Authenticatable
    {
        use Notifiable;
        use HasApiTokens;
    ...
    
    1. Passport::routes 실행 및 Implicit Grant추가
      passport를 이용할 경우 기본적으로 제공하는 /oauth/token과 같은 경로를 활성화 하기 위해 프로바이더를 수정해야한다.
      app/Provider/AuthServiceProvider
    use Laravel\Passport\Passport;
    
    class AuthServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            $this->registerPolicies();
    
            Passport::routes();
    
            Passport::enableImplicitGrant();
            // 아래 내용은 토크에 대한 유효기간 옵션
            // normal token expired
            Passport::tokensExpireIn(now()->addDay(15));
    
            // refresh token expired
            Passport::refreshTokensExpireIn(now()->addDay(30));
    
            // personal token expired
            Passport::personalAccessTokensExpireIn(now()->addMonth(6));
        }
    1. dirver 옵션 변경
      app/config/auth.php 에 guard.api 부분 driver 부분을 passport로 수정
        'guards' => [
            'web' => [
                'driver' => 'session',
                'provider' => 'users',
            ],
    
            'api' => [
                'driver' => 'passport',
                'provider' => 'users',
                'hash' => true,
            ],
        ],
    1. 암호화 키 생성
      passport는 access_token을 생성하기 위해 storage/oauth-*.key 파일들을 사용한다.
      하지만 .gitignore 에서는 해당 파일들을 저장소에 올리지 못하게 블럭하고 있다. 때문에 본인의 프로젝트를 위한 암호화 키를 별도로 생성해야 한다. 이를 위해 passport에서는 3가지 방법을 제공하고 있다.
    • passport:keys => 암호화 키를 생성
    • passport:client => Personal Access Client , Passwrod Grant Client를 생성
    • passport:install => keys, client둘다

    따라서 경우에 맞게 해주는게 좋으나 지금은 install을 해준다.

    php artisan passport:install

    해당 명령어를 입력했다면 mysql의 oauth_clients 테이블에는 아래와 같은 레코드가 생성되어 있다.

    이를 확인 했다면 POSTMAN 과 같은 테스트 툴을 이용하여 실제로 로그인 인증을 해보자.

    위에서의 설정을 통해 /oauth/tokens 패스가 이용가능하며 이곳에 POST로 데이터를 넘기는 것이 포인트
    파라메터에 대해 이야기 하자면

    • grant_type : "passord" oauth_clients 테이블 의 password_client를 이용할 것이기에 password
    • client_id : 해당 레코드의 id는 2였기 에 2
    • client_secret : 해당 레코드의 값
    • username : register를 이용하여 생성한 유저의 메일 정보
    • password : register를 이용하여 생성한 유저의 패스워드

    성공하면

    와 같이 토큰이 돌아온다.

    이를 사용하기 위해선

    와 같이 Header에 Authorization 항목을 붙이고 위의 작업에서 받은 access_token을 사용하면 된다.

    해당 API에서 인증을 사용하고 싶다면 route.php를 수정해야한다.

    Route::middleware('auth:api')->get('/articles', 'ArticleController@index');

    이위에 refresh토크을 사용하는 방법은 나도 아직 해보지 않아서 패스...ㅋㅋ route 테이블을 확인해보니
    /oauth/tokens/refresh
    패스가 있엇기 때문에 이걸 이용하면 되지 않을까?
    그리고 password_client가 아닌 personal_access_client방식도 아직 안해봤다.. ㅋㅋ 당장은 쓸일이 없지 않을까..?ㅎ

    반응형

    'Technique > PHP' 카테고리의 다른 글

    LSB(Late Static Binding)  (0) 2016.12.21
    static, const, memoization  (0) 2016.12.20
    1,0 true, false  (0) 2016.12.07
    setcookie  (0) 2016.05.09
    money_format  (0) 2016.04.15

    댓글

Designed by Tistory.