토큰이란 무엇인가?
예전엔 버스를 탈때 버스 토큰을 구입해서 현금 대신 내고 탔다.
Token(토큰) 은 버스를 타기 위해서 필요한 증명서 이다.
제한된 인터넷에서 정보를 조회하기 위해서는 인증 또는 권한이 있어야 한다.
웹브라우져가 아닌 경우에는 쿠키를 저장할 방법이 없기 때문에 무언가 인증할 도구가 필요하다.
매번 요청시마다 아이디와 비번을 요구할 수도 없는 노릇이고, 보안에 특히 취악하다.
이런 문제를 해결하는것이 토큰이다.
즉 토큰만 있다면 사용자를 확인 할 수 있다.
토큰은 어디에서 발급받나 ?
정보를 조회하고자 하는 서버에서 발급받고 서버에 보여주면 된다.
Laravel 에서는 이런 기능을 손쉽게 구현해 주는 도구가 sanctum 이다.
Laravel 10 이상에서는 기본으로 설치되어 있다.
설치
composer require laravel/sanctum
config/sanctum.php
설치한 이후에는 kernel.php 에 등록 없이 middleware 에서 바로 사용 가능하다.
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/users',function (Request $request){
return User::find(1);
});
});
2가지 기능을 모두 제공한다.
- API 토큰 인증
- SPA 인증
API 토큰 인증
모델에서 HasApiTokens 기능을 갖고 있어야 한다.
use HasApiTokens
class User extends Authenticatable
{
use HasApiTokens;
}
public function tokens()
{
return $this->morphMany(Sanctum::$personalAccessTokenModel, 'tokenable');
}
token()
tokenCan()
발급 : createToken()
조회 : foreach( $user->tokens as token)
우리가 해외 여행을 떠날때, 비자가 필요한 경우가 있다. 이때 관광 비자를 받을지, 또는 복수 비자를 받을지 결정해야 한다.
토큰도 조회만 할지, 또는 저장도 같이 할지를 정해서 발급 가능하다.
return $user->createToken('token-name', ['server:update'])->plainTextToken;
if ($user->tokenCan('server:update')) {
// ...
}
미들웨어에서 확인 가능하다.
우선 kernel.php에 등록이 필요함
'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
abilities 는 제시된 모든 권한이 있어야 함.
ability 는 제시된 권한이 한가지라도 있으면 됨.
Route::get('/orders', function () {
// Token has both "check-status" and "place-orders" abilities...
})->middleware(['auth:sanctum', 'abilities:check-status,place-orders']);
Route::get('/orders', function () {
// Token has the "check-status" or "place-orders" ability...
})->middleware(['auth:sanctum', 'ability:check-status,place-orders']);
SPA 인증
토큰을 사용하지 않고 쿠키 기반의 세션을 사용해서 인증한다.
사용할 도메인을 결정해야 한다.
'Laravel' 카테고리의 다른 글
Laravel - Enum 생성, 조회 및 Validation 처리하기 (사용자 권한 구분하기) (0) | 2024.01.29 |
---|---|
Laravel - Service Container 서비스 컨테이너에 대해서 (0) | 2024.01.16 |
Laravel - Event에 대해서 (0) | 2024.01.08 |
Laravel - FormRequest에 대해서 (0) | 2024.01.02 |
Laravel - Socialite - Two\InvalidStateException 에러 (0) | 2023.12.27 |
토큰이란 무엇인가?
예전엔 버스를 탈때 버스 토큰을 구입해서 현금 대신 내고 탔다.
Token(토큰) 은 버스를 타기 위해서 필요한 증명서 이다.
제한된 인터넷에서 정보를 조회하기 위해서는 인증 또는 권한이 있어야 한다.
웹브라우져가 아닌 경우에는 쿠키를 저장할 방법이 없기 때문에 무언가 인증할 도구가 필요하다.
매번 요청시마다 아이디와 비번을 요구할 수도 없는 노릇이고, 보안에 특히 취악하다.
이런 문제를 해결하는것이 토큰이다.
즉 토큰만 있다면 사용자를 확인 할 수 있다.
토큰은 어디에서 발급받나 ?
정보를 조회하고자 하는 서버에서 발급받고 서버에 보여주면 된다.
Laravel 에서는 이런 기능을 손쉽게 구현해 주는 도구가 sanctum 이다.
Laravel 10 이상에서는 기본으로 설치되어 있다.
설치
composer require laravel/sanctum
config/sanctum.php
설치한 이후에는 kernel.php 에 등록 없이 middleware 에서 바로 사용 가능하다.
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/users',function (Request $request){
return User::find(1);
});
});
2가지 기능을 모두 제공한다.
- API 토큰 인증
- SPA 인증
API 토큰 인증
모델에서 HasApiTokens 기능을 갖고 있어야 한다.
use HasApiTokens
class User extends Authenticatable
{
use HasApiTokens;
}
public function tokens()
{
return $this->morphMany(Sanctum::$personalAccessTokenModel, 'tokenable');
}
token()
tokenCan()
발급 : createToken()
조회 : foreach( $user->tokens as token)
우리가 해외 여행을 떠날때, 비자가 필요한 경우가 있다. 이때 관광 비자를 받을지, 또는 복수 비자를 받을지 결정해야 한다.
토큰도 조회만 할지, 또는 저장도 같이 할지를 정해서 발급 가능하다.
return $user->createToken('token-name', ['server:update'])->plainTextToken;
if ($user->tokenCan('server:update')) {
// ...
}
미들웨어에서 확인 가능하다.
우선 kernel.php에 등록이 필요함
'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
abilities 는 제시된 모든 권한이 있어야 함.
ability 는 제시된 권한이 한가지라도 있으면 됨.
Route::get('/orders', function () {
// Token has both "check-status" and "place-orders" abilities...
})->middleware(['auth:sanctum', 'abilities:check-status,place-orders']);
Route::get('/orders', function () {
// Token has the "check-status" or "place-orders" ability...
})->middleware(['auth:sanctum', 'ability:check-status,place-orders']);
SPA 인증
토큰을 사용하지 않고 쿠키 기반의 세션을 사용해서 인증한다.
사용할 도메인을 결정해야 한다.
'Laravel' 카테고리의 다른 글
Laravel - Enum 생성, 조회 및 Validation 처리하기 (사용자 권한 구분하기) (0) | 2024.01.29 |
---|---|
Laravel - Service Container 서비스 컨테이너에 대해서 (0) | 2024.01.16 |
Laravel - Event에 대해서 (0) | 2024.01.08 |
Laravel - FormRequest에 대해서 (0) | 2024.01.02 |
Laravel - Socialite - Two\InvalidStateException 에러 (0) | 2023.12.27 |