-
Laravel 6.x Passport 를 이용한 API인증Technique/PHP 2020. 1. 23. 13:12반응형
기본적으로 레퍼런스 사이트에 나와있는 방법을 참고하였으며, 보면서 이해가 안되는 부분은 여기저기 검색해가면서 만든걸 바탕으로 작성합니다.
- 참고 https://laravel.kr/docs/6.x/passport
- 참고 https://laravel.kr/docs/6.x/authentication
- 참고 https://laravel.kr/docs/6.x/api-authentication
전재조건
- 레퍼런스를 참고하여 coposer 를 이용한 어플리케이션 설치
- 레퍼런스를 참고하여 기본 인증/마이그레이션에 성공
- /register를 이용하여 1개 이상의 아카운트 작성을 마친 상태
composer 를 이용하여 passport 를 도입
composer require laravel/passport
migrate 실행
php artisan migrate
HashApi trait를 추가
app/User.php 파일에 아래이 내용을 추가
use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use Notifiable; use HasApiTokens; ...
- 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)); }
- dirver 옵션 변경
app/config/auth.php 에 guard.api 부분 driver 부분을 passport로 수정
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', 'hash' => true, ], ],
- 암호화 키 생성
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