티스토리 뷰
PHP + LARAVEL + Passport
둘 이상의 Guard를 설정하는 것은 라라벨 공식 문서를 통해서 쉽게 확인이 가능하다.
세션과 Passport
를 이용한 토큰 인증을 적용하여 router 마다 middleware에 적용하면 쉽게 사용할 수 있다.
기존에 무의식적으로 사용했던 client_credentials
은 사용자에 대한 인증이라기 보다 머신(서버)에 대한 인증이라고
보는게 맞다.
grant_type:Authorization_code
를 이용하여 사용하려 했으나, 인증에 대한 middleware
를 동시에 사용하고자 하지만
기본적으로 하나의 인증이 실패할 경우 다음을 진행하지 않는다.
예를 들어
//route.php
Route::get('user', function() {})->middleware(['client','auth:api']);
client_credentials
와 authorization_code
를 하나의 컨트롤러에서 이용하여
사용자가 접근하거나 머신이 접근하는 것을 분기하여 처리하고자 하지만 먼저 선언된 인증이 실패 할 경우
그 다음 middleware
를 진행하지 않는다.
https://github.com/laravel/passport/issues/898
역시나 비슷한 고민을 하는 사람들이 있는 것을 확인할 수 있었다.
두 가지 middleware
를 사용할 수 있는 별도의 미들웨어를 생성하여 처리하는 방법으로 대체 가능하다.
//app\middleware\CheckAPICredentials.php
<?php
namespace App\Http\Middleware;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Passport\Http\Middleware\CheckClientCredentials;
class CheckAPICredentials extends CheckClientCredentials
{
/**
* Validate the scopes and token on the incoming request.
*
* @param \Psr\Http\Message\ServerRequestInterface $psr
* @param array $scopes
* @return void
* @throws \Laravel\Passport\Exceptions\MissingScopeException|\Illuminate\Auth\AuthenticationException
*/
protected function validate($psr, $scopes)
{
$token = $this->repository->find($psr->getAttribute('oauth_access_token_id'));
throw_if(empty($token), exception:"AuthenticationException");
if (in_array('*', $token->scopes)) {
return;
}
// AuthorizationCode with PKCE guard auth:api
if (!empty($token->user_id)) {
Auth::login(User::find($token->user_id));
}
foreach ($scopes as $scope) {
if ($token->cant($scope)) {
throw new MissingScopeException($scope);
}
}
}
}
#laravel #passport #guard
'공부합시다 > php' 카테고리의 다른 글
Laravel 다중 DB 사용시 테스트 트랜잭션 사용하기. (0) | 2023.11.13 |
---|---|
Laravel auth session + token 동시에 사용하기 (0) | 2023.09.25 |
COMPOSER 2.x 버전 설치 및 업데이트 (0) | 2023.07.13 |
라라벨 EloquantModel Multiple PrimaryKey 이슈 (0) | 2023.07.05 |
PHP L5-Swagger 예시 (0) | 2023.06.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- l5-swagger
- addMonthWithoutOverflow
- vim
- 라라벨
- addMonth
- php-laravel
- bitwarden-cli
- POP3
- eloquent-observer
- graphql
- django
- redis
- password-manager
- MySQL
- 자바스크립트
- exception-test
- 테스트_다중트랜잭션
- graphql-php
- 정의
- Laravel
- session+token authorize
- 메일
- aaa패턴
- php
- laravel-kafka
- observer 매개변수 전달하기
- laravel-test
- l5-swagger-response
- 정규식
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함