Archives
10-30 01:25
Today
0
Total
287,080
관리 메뉴

FILife

[5.3] 커스템 테이블로 구성한 인증으로 API 인증 구현하기 본문

내가 자꾸 까먹어서 쓰는 개발 이야기/Laravel

[5.3] 커스템 테이블로 구성한 인증으로 API 인증 구현하기

FIL 2017. 2. 7. 10:37

기본적으로 Laravel doc(https://laravel.kr/docs/5.3/passport)를 따라했다.


1. '설치하기' 파트는 기본적으로 동일하나, Laravel 5.4가 나오면서 passport가 2.0.x로 업데이트 되었으므로, 버전을 지정해준다.


(https://laravel.com/docs/5.3/passport#installation)


composer require laravel/passport=~1.0


하는김에 Laravel을 5.4로 업데이트 해버릴까 싶어 시도해봤는데 아래와같은 에러를 해결하지 못해 우선 보류했다.


Call to undefined method Illuminate\Foundation\Application::share()


(제보바람)



2. '빠른 프론트엔드 시작하기' 파트는 건너뛴다. (웹 앱을 개발중이거나 기타 필요한 경우엔 해도 좋다.)



3. '토큰 지속시간' 부분은 필요하면 추가한다.



4. client를 생성한다.


php artisan passport:client


DB의 oauth_clients 테이블에 데이터가 추가되었을 것이다.


grant_type 관련 오류가 생기면 해당 테이블을 보면 된다.


personal_access_client, password_client 필드의 값을 바꿔주면 해결되는것 같았다.


(개인적으로 해당 필드가 0일때 정상 동작을 했다. 자세한건 oauth 문서를 봐야할듯 하다.)



5. 사용자 모델에서 passport가 사용자를 조회할 때 사용되는 메서드를 오버라이드 한다. (중요)


지난번 글에 맞게 user_id, user_password라고 가정한다.


테이블명에 따라 모델은 아마 SiteUser.php 였을것이다.


- 사용자 ID 조회: 해당하는 사용자의 데이터를 리턴해준다.


public function findForPassport($username)
{
return $this->where("user_id", $username)->first();
}


- 사용자 Password 검증: 패스워드 일치 여부를 bool 형태로 리턴해준다.


public function validateForPassportPasswordGrant($password)
{
return password_verify($password, $this->user_password);
}



6. passport가 자동으로 생성한 http://your-app/oauth/token 라우트에 데이터를 보내 토큰을 받을 수 있다.


grant_type:password
username:{user_id}
password:{user_password}
client_id:{client_id}
client_secret:{client_secret}
redirect_uri:http://your-app/callback-route


사용자에게 입력받은 값들과, 'artisan passport:client'로 발급된 client_id와 client_password를 보내주면 된다.


token_type, expires_in, access_token, refresh_token 을 받을 수 있다.



7. 받은 토큰을 'auth:api' 미들웨어로 그룹화된 route에 아래와 같은 Header를 만들어 보내주면 Auth::user() 를 통해 web에서 로그인한 사용자와 같이 조회할 수 있다.


Accept:application/json
Authorization:Bearer {access_token}


0 Comments
댓글쓰기 폼