쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
구매 만족 후기
추천 재능


















639, PHOSHIN



136, 삼월


           
0, 마케팅위너

해당 지식과 관련있는 인기재능

​우선 관심을 갖아줘서 감사합니다.제게 편하게 문의주세요.제가 작업을 진행하지 않더라도 답변을 성심 성의것 하겠습니다.10년 이상 된 경력의 ...

 안녕하세요. 개발자 GP 입니다. 모든 사이트 개발은 웹사이트 제작시 웹표준을 준수하여 진행합니다.웹표준이란 국제표준화 단체...

 기본 작업은 사이트의 기능수정입니다.호스팅에 보드 설치 및 셋팅. (그누, 제로, 워드, 기타 cafe24,고도몰 등)그리고 각 보드의 대표적인 ...

Laravel Sanctum을 활용한 SPA 인증

2025-01-29 21:00:31

재능넷
조회수 62 댓글수 0

Laravel Sanctum으로 SPA 인증 마스터하기 🚀

콘텐츠 대표 이미지 - Laravel Sanctum을 활용한 SPA 인증

 

 

안녕하세요, 개발자 여러분! 오늘은 정말 핫한 주제로 찾아왔어요. 바로 Laravel Sanctum을 활용한 SPA 인증에 대해 깊이 파헤쳐볼 거예요. 이 글을 다 읽고 나면 여러분도 Sanctum 마스터가 될 수 있을 거예요! 😎

요즘 웹 개발 트렌드를 보면 SPA(Single Page Application)가 대세잖아요? 근데 SPA에서 인증을 구현하는 게 좀 까다롭다는 거 다들 아시죠? 그래서 Laravel이 Sanctum이라는 초간단 인증 솔루션을 내놓은 거예요. 이거 진짜 대박이에요! 🎉

우리가 이 글에서 다룰 내용들을 미리 살짝 엿보자면요:

  • Sanctum이 뭐길래 이렇게 핫한 건지
  • SPA 인증의 비밀 레시피
  • Sanctum 설치부터 사용까지 A to Z
  • 실제 프로젝트에 적용하는 꿀팁들
  • 보안 강화를 위한 추가 설정들

자, 이제 본격적으로 시작해볼까요? 여러분의 개발 실력이 한 단계 업그레이드되는 시간이 될 거예요! 🚀

1. Sanctum이 뭐길래 이렇게 핫한 거야? 🔥

여러분, Laravel Sanctum이 뭔지 아세요? 모르셔도 괜찮아요. 지금부터 상세하게 설명해드릴게요! 😊

Laravel Sanctum은 SPA(Single Page Application), 모바일 애플리케이션, 그리고 간단한 토큰 기반 API를 위한 가벼운 인증 시스템이에요. 쉽게 말해서, 우리가 만든 앱에서 사용자를 안전하게 인증하고 관리할 수 있게 해주는 도구라고 볼 수 있죠.

근데 왜 이렇게 인기가 많을까요? 🤔

Sanctum의 인기 비결:

  • 초간단 설정: 복잡한 설정 없이 바로 사용 가능!
  • 다재다능: SPA, 모바일 앱, API 등 다양한 환경 지원
  • 보안성: CSRF 보호, 세션 인증 등 강력한 보안 기능 제공
  • 성능: 가볍고 빠른 성능으로 앱의 반응성 향상
  • Laravel과의 완벽한 통합: Laravel 생태계와 찰떡궁합!

ㅋㅋㅋ 이래서 개발자들이 Sanctum에 열광하는 거예요! 특히 SPA 개발할 때 인증 구현하느라 머리 아프셨던 분들께는 정말 단비 같은 존재일 거예요. 😌

그럼 Sanctum이 어떻게 동작하는지 좀 더 자세히 들여다볼까요?

Sanctum의 동작 원리

Sanctum은 크게 두 가지 방식으로 인증을 처리해요:

  1. SPA를 위한 쿠키 기반 세션 인증
  2. 모바일 애플리케이션과 API를 위한 토큰 기반 인증

오늘은 주로 SPA 인증에 초점을 맞춰볼 거예요. SPA에서 Sanctum은 Laravel의 기본 세션 인증을 사용해요. 근데 여기서 특별한 점이 있어요. 바로 CSRF 보호와 세션 쿠키를 동시에 처리한다는 거죠!

이게 무슨 말이냐고요? 쉽게 설명해드릴게요! 😄

SPA에서의 Sanctum 동작 과정:

  1. 사용자가 로그인 요청을 보내면
  2. Sanctum이 사용자 정보를 확인하고
  3. 세션을 생성해서 쿠키에 저장해요
  4. 이후 요청마다 이 쿠키를 통해 인증을 처리하죠
  5. CSRF 토큰도 자동으로 처리해주니까 보안도 챙기고!

이렇게 하면 프론트엔드와 백엔드가 분리되어 있어도 마치 하나의 앱처럼 자연스럽게 동작할 수 있어요. 진짜 편하지 않나요? 😎

그리고 Sanctum의 또 다른 장점! API 토큰 기능도 제공한다는 거예요. 이건 모바일 앱이나 외부 서비스와의 연동에 딱이에요. 토큰 하나로 안전하게 API를 호출할 수 있으니까요.

Sanctum의 인증 흐름도 SPA / 모바일 앱 Laravel 백엔드 1. 인증 요청 2. 세션/토큰 발급 Sanctum 인증 처리 요청마다 인증 인증 확인

이 그림을 보면 Sanctum이 어떻게 SPA와 Laravel 백엔드 사이에서 인증을 처리하는지 한눈에 볼 수 있죠? 정말 깔끔하고 효율적이에요! 👍

자, 여기까지 Sanctum의 기본 개념과 동작 원리에 대해 알아봤어요. 이제 좀 감이 오시나요? ㅋㅋ

다음 섹션에서는 SPA 인증의 비밀 레시피에 대해 더 자세히 알아볼 거예요. Sanctum이 어떻게 SPA 인증의 여러 문제들을 해결하는지, 그 비결을 파헤쳐볼 거예요! 기대되지 않나요? 😄

그리고 잠깐! 여러분, 혹시 재능넷이라는 사이트 아세요? 개발자들의 재능을 공유하고 거래할 수 있는 플랫폼인데, 여기서도 Laravel Sanctum을 사용해서 인증 시스템을 구축했다고 해요. 실제 서비스에서 Sanctum이 어떻게 활용되는지 좋은 예시가 될 것 같아요. 나중에 한번 들어가 보는 것도 좋을 것 같아요! 😉

자, 이제 다음 섹션으로 넘어가볼까요? SPA 인증의 비밀 레시피, 정말 궁금하지 않나요? 🤫

2. SPA 인증의 비밀 레시피 🍳

여러분, SPA 개발할 때 인증 구현하느라 고생 많으셨죠? ㅋㅋㅋ 저도 처음에는 정말 머리 아팠어요. 근데 Sanctum을 알고 나서부터는 인생이 달라졌어요! 진짜에요! 😆

그럼 이제 Sanctum이 어떻게 SPA 인증의 문제들을 해결하는지, 그 비밀 레시피를 하나씩 파헤쳐볼까요?

1. CORS(Cross-Origin Resource Sharing) 문제 해결

SPA 개발할 때 가장 먼저 부딪히는 벽, 바로 CORS 문제죠. 프론트엔드와 백엔드가 다른 도메인에 있으면 브라우저가 보안상의 이유로 요청을 막아버리니까요. 😓

근데 Sanctum은 이 문제를 아주 우아하게 해결해요!

Sanctum의 CORS 해결책:

  • config/cors.php 파일에서 CORS 설정을 쉽게 관리
  • 프론트엔드 도메인을 허용 목록에 추가하면 끝!
  • credentials 옵션을 true로 설정해 쿠키 전송 허용

이렇게 하면 프론트엔드와 백엔드가 서로 다른 도메인에 있어도 문제없이 통신할 수 있어요. 진짜 편하지 않나요? 😎

2. CSRF(Cross-Site Request Forgery) 공격 방어

CSRF 공격, 들어보셨죠? 해커가 사용자 몰래 악의적인 요청을 보내는 공격이에요. 이거 막으려면 보통 CSRF 토큰을 사용하는데, SPA에서는 이것도 좀 까다로워요.

근데 Sanctum은 이것도 완벽하게 해결해줘요!

Sanctum의 CSRF 방어 전략:

  • Laravel의 기본 CSRF 보호 메커니즘 활용
  • CSRF 토큰을 쿠키에 자동으로 설정
  • 프론트엔드에서 별도의 처리 없이 자동으로 CSRF 토큰 전송

이렇게 하면 개발자가 따로 CSRF 토큰을 관리할 필요가 없어요. Sanctum이 알아서 다 해주니까요! 👏

3. 세션 관리의 편리함

SPA에서 세션 관리, 특히 여러 탭이나 창에서 로그인 상태를 유지하는 게 좀 골치 아프죠? Sanctum은 이 문제도 깔끔하게 해결해요!

Sanctum의 세션 관리 비결:

  • Laravel의 기본 세션 메커니즘 사용
  • HTTP-only 쿠키로 세션 정보 안전하게 저장
  • 여러 탭/창에서 자동으로 로그인 상태 유지

이렇게 하면 사용자가 여러 탭을 열어도, 브라우저를 껐다 켜도 로그인 상태가 유지돼요. 사용자 경험 대박 좋아지겠죠? 😍

4. 토큰 기반 인증과의 조화

API 토큰 인증이 필요할 때도 있잖아요? 외부 서비스나 모바일 앱과 연동할 때 같은 경우요. Sanctum은 이것도 지원해요!

Sanctum의 토큰 인증 기능:

  • 간단한 API 토큰 생성 및 관리
  • 토큰에 능력(abilities) 부여 가능
  • 세션 기반 인증과 토큰 기반 인증을 동시에 사용 가능

이렇게 하면 SPA뿐만 아니라 다양한 클라이언트에서 안전하게 API를 호출할 수 있어요. 진짜 만능이죠? 😎

5. 보안 강화

보안은 아무리 강조해도 지나치지 않죠. Sanctum은 보안에도 정말 신경을 많이 썼어요!

Sanctum의 보안 강화 전략:

  • HTTP-only 쿠키로 XSS 공격 방어
  • HTTPS 강제 적용 옵션
  • Same-Site 쿠키 정책 지원

이런 보안 기능들 덕분에 개발자가 따로 신경 쓰지 않아도 기본적인 보안은 확보할 수 있어요. 안심되지 않나요? 😌

Sanctum의 SPA 인증 비밀 레시피 Sanctum의 SPA 인증 비밀 레시피 CORS 문제 해결 CSRF 공격 방어 편리한 세션 관리 토큰 기반 인증 지원 강력한 보안 기능 Sanctum Magic ✨ 쉬운 설정 자동화된 보안

이 그림을 보면 Sanctum이 얼마나 다재다능한지 한눈에 볼 수 있죠? 정말 SPA 인증의 완벽한 레시피예요! 👨‍🍳👩‍🍳

자, 여기까지 Sanctum의 SPA 인증 비밀 레시피를 알아봤어요. 어때요? 생각보다 더 대단하지 않나요? ㅋㅋㅋ

Sanctum을 사용하면 이런 복잡한 문제들을 거의 자동으로 해결할 수 있어요. 개발자는 비즈니스 로직에만 집중할 수 있게 되는 거죠. 이게 바로 Sanctum의 매력이에요! 😍

그리고 재밌는 사실! 재능넷이라는 재능 공유 플랫폼에서도 Sanctum을 사용해서 인증 시스템을 구축했다고 해요. 실제 서비스에서 이렇게 활용되고 있다니, Sanctum의 실용성이 입증된 거 아닐까요? 👍

다음 섹션에서는 실제로 Sanctum을 설치하고 사용하는 방법에 대해 자세히 알아볼 거예요. 이론은 충분히 배웠으니, 이제 실전으로 가봐요! 여러분의 프로젝트에 Sanctum을 적용할 준비 되셨나요? 🚀

다음 섹션에서 만나요! 기대되지 않나요? 😄

3. Sanctum 설치부터 사용까지 A to Z 🛠️

자, 이제 실전으로 들어갈 시간이에요! Sanctum을 어떻게 설치하고 사용하는지 상세하게 알아볼 거예요. 준비되셨나요? let's go! 🚀

Step 1: Sanctum 설치하기

먼저 Sanctum을 설치해야겠죠? Laravel 프로젝트가 이미 있다고 가정하고 시작할게요.

Sanctum 설치 명령어:

composer require laravel/sanctum

이 명령어를 실행하면 Sanctum이 여러분의 프로젝트에 설치돼요. 엄청 간단하죠? ㅋㅋ

Step 2: Sanctum 설정하기

설치가 끝났으면 이제 설정을 해줘야 해요. 걱정 마세요, 이것도 엄청 쉬워요!

Sanctum 설정 단계:

  1. 설정 파일 발행:
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
  2. 마이그레이션 실행:
    php artisan migrate

이렇게 하면 Sanctum 설정 파일이 생성되고, 필요한 데이터베이스 테이블도 만들어져요. 완전 자동이죠? 😎

Step 3: Sanctum 미들웨어 추가하기

이제 Sanctum 미들웨어를 추가해야 해요. 이 미들웨어가 인증을 처리해줄 거예요.

app/Http/Kernel.php 파일 수정:

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

// ...

protected $middlewareGroups = [
    // ...

    'api' => [
        EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

이렇게 하면 API 요청에 대해 Sanctum이 자동으로 인증을 처리해줘요. 편하죠? 👍

Step 4: CORS 설정하기

SPA를 위해서는 CORS 설정이 필수예요. 네, 계속해서 CORS 설정부터 이어가겠습니다.

SPA를 위해서는 CORS 설정이 필수예요. Sanctum이 CORS를 쉽게 처리할 수 있게 해주지만, 우리가 직접 몇 가지 설정을 해줘야 해요.

config/cors.php 파일 수정:

return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://localhost:3000'], // 여러분의 프론트엔드 URL로 변경하세요
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true, // 이 부분이 중요해요!
];

이렇게 설정하면 프론트엔드에서 백엔드로 안전하게 요청을 보낼 수 있어요. supports_credentials를 true로 설정한 것, 기억하세요! 이게 쿠키 기반 인증의 핵심이에요. 😉

Step 5: 인증 라우트 설정하기

이제 로그인, 로그아웃 같은 인증 관련 라우트를 설정해볼게요.

routes/api.php 파일에 추가:

use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\LogoutController;

Route::post('/login', [LoginController::class, 'login']);
Route::post('/logout', [LogoutController::class, 'logout'])->middleware('auth:sanctum');
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');

이렇게 하면 기본적인 인증 라우트가 설정돼요. 로그인, 로그아웃, 그리고 현재 인증된 사용자 정보를 가져오는 라우트까지요. 👌

Step 6: 컨트롤러 구현하기

이제 실제로 인증을 처리할 컨트롤러를 만들어볼게요.

LoginController.php:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);

        if (Auth::attempt($credentials)) {
            $request->session()->regenerate();
            return response()->json(['message' => 'Login successful'], 200);
        }

        return response()->json(['message' => 'The provided credentials do not match our records.'], 401);
    }
}

LogoutController.php:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LogoutController extends Controller
{
    public function logout(Request $request)
    {
        Auth::guard('web')->logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return response()->json(['message' => 'Logged out successfully'], 200);
    }
}

이렇게 하면 로그인과 로그아웃 기능이 완성돼요. Sanctum이 세션을 관리해주기 때문에 우리는 기본적인 로직만 작성하면 돼요. 정말 편하죠? 😄

Step 7: 프론트엔드에서 사용하기

마지막으로, 프론트엔드에서 어떻게 Sanctum을 사용하는지 간단히 살펴볼게요. React를 예로 들어볼게요.

React에서 로그인 요청 보내기:

import axios from 'axios';

axios.defaults.withCredentials = true; // 이 부분이 중요해요!

const login = async (email, password) => {
  try {
    // CSRF 쿠키 가져오기
    await axios.get('http://localhost:8000/sanctum/csrf-cookie');
    
    // 로그인 요청
    const response = await axios.post('http://localhost:8000/api/login', {
      email,
      password
    });
    
    console.log('Login successful', response.data);
  } catch (error) {
    console.error('Login failed', error.response.data);
  }
};

여기서 주목할 점은 axios.defaults.withCredentials = true 부분이에요. 이렇게 설정해야 쿠키가 요청과 함께 전송돼요. 그리고 로그인 전에 CSRF 쿠키를 먼저 가져오는 것도 잊지 마세요!

Sanctum 설치 및 사용 과정 Sanctum 설치 및 사용 과정 1. 설치 2. 설정 3. 미들웨어 4. CORS 5. 라우트 6. 컨트롤러 7. 프론트엔드 연동 Sanctum Magic ✨

자, 여기까지가 Sanctum을 설치하고 기본적으로 사용하는 방법이에요. 어때요? 생각보다 쉽죠? 😊

이렇게 설정만 잘 해두면, 이후에는 Sanctum이 알아서 인증을 처리해줘요. 개발자는 비즈니스 로직에만 집중할 수 있게 되는 거죠. 이게 바로 Sanctum의 매력이에요!

그리고 잊지 마세요. 실제 프로덕션 환경에서는 HTTPS를 꼭 사용해야 해요. 보안을 위해서 정말 중요해요!

자, 여기까지 Sanctum 설치부터 사용까지 A to Z를 알아봤어요. 이제 여러분도 Sanctum 마스터가 된 것 같은데요? ㅋㅋㅋ

다음 섹션에서는 실제 프로젝트에 Sanctum을 적용할 때 알아두면 좋은 꿀팁들을 소개해드릴게요. 기대되지 않나요? 😄

4. 실제 프로젝트에 적용하는 꿀팁들 🍯

자, 이제 Sanctum의 기본을 마스터하셨으니 실전에서 사용할 때 알아두면 좋은 꿀팁들을 알려드릴게요. 이 팁들을 활용하면 여러분의 프로젝트가 한층 더 견고해질 거예요! 😎

1. 토큰 수명 관리하기

Sanctum의 토큰은 기본적으로 영구적이에요. 하지만 보안을 위해 토큰의 수명을 제한하는 게 좋죠.

config/sanctum.php 파일에 추가:

'expiration' => 60 * 24, // 24시간 후 만료

이렇게 설정하면 토큰이 24시간 후에 자동으로 만료돼요. 보안과 사용자 경험 사이의 균형을 잡는 데 도움이 될 거예요. 👍

2. 다중 인증 가드 사용하기

여러 종류의 사용자(예: 일반 사용자, 관리자)를 다르게 인증하고 싶다면 다중 가드를 사용할 수 있어요.

config/auth.php 파일 수정:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

이렇게 설정하면 일반 사용자와 관리자를 별도로 인증할 수 있어요. 라우트에서는 이렇게 사용하면 돼요:

Route::middleware('auth:sanctum,admin')->get('/admin', function () {
    // 관리자만 접근 가능
});

멋지죠? 이렇게 하면 보안을 한층 더 강화할 수 있어요. 😊

3. 사용자 지정 능력(Abilities) 활용하기

Sanctum을 사용하면 토큰에 특정 능력을 부여할 수 있어요. 이를 통해 세밀한 권한 제어가 가능해져요.

토큰 생성 시 능력 부여:

$token = $user->createToken('token-name', ['post:create', 'post:read'])->plainTextToken;

능력 확인:

if ($user->tokenCan('post:create')) {
    // 포스트 생성 로직
}

이렇게 하면 같은 사용자라도 토큰에 따라 다른 권한을 가질 수 있어요. API를 더 유연하게 만들 수 있죠. 👨‍💻

4. 첫 요청 시 CSRF 토큰 자동 설정

SPA에서 매번 CSRF 토큰을 수동으로 가져오는 게 번거롭다면, 첫 요청 시 자동으로 설정하는 방법이 있어요.

프론트엔드 axios 설정:

import axios from 'axios';

axios.defaults.withCredentials = true;

axios.interceptors.response.use(
  response => response,
  async error => {
    if (error.response.status === 419) {
      await axios.get('/sanctum/csrf-cookie');
      return axios(error.config);
    }
    return Promise.reject(error);
  }
);

이렇게 하면 419 에러(CSRF 토큰 만료)가 발생했을 때 자동으로 새 토큰을 가져와서 재요청을 보내요. 사용자 경험이 훨씬 좋아질 거예요! 😃

5. 로그아웃 시 모든 디바이스에서 로그아웃

보안을 더욱 강화하고 싶다면, 로그아웃 시 해당 사용자의 모든 토큰을 삭제할 수 있어요.

LogoutController.php 수정:

public function logout(Request $request)
{
    $user = $request->user();
    $user->tokens()->delete(); // 모든 토큰 삭제
    Auth::guard('web')->logout();
    $request->session()->invalidate();
    $request->session()->regenerateToken();
    return response()->json(['message' => 'Logged out from all devices'], 200);
}

이렇게 하면 한 디바이스에서 로그아웃할 때 모든 디바이스에서 동시에 로그아웃돼요. 보안에 민감한 애플리케이션에 특히 유용하죠. 🔒

Sanctum 활용 꿀팁 Sanctum 활용 꿀팁 토큰 수명 관리 다중 인증 가드 사용자 지정 능력 CSRF 토큰 자동 설정 전체 디바이스 로그아웃 보안 강화 & 사용자 경험 향상

자, 여기까지가 Sanctum을 실제 프로젝트에 적용할 때 알아두면 좋은 꿀팁들이에요. 어떠세요? 이 팁들을 활용하면 여러분의 애플리케이션이 한층 더 견고해질 거예요. 😊

그리고 잊지 마세요! 보안은 항상 진화하고 있어요. 최신 보안 동향을 계속 체크하고, 필요하다면 Sanctum 설정을 업데이트하는 것도 중요해요.

마지막으로, 재능넷 같은 실제 서비스에서 Sanctum을 어떻게 활용하고 있는지 살펴보는 것도 좋은 방법이에요. 실제 사례를 통해 배울 점이 많을 거예요. 👍

자, 이제 여러분은 Sanctum 전문가가 된 것 같은데요? ㅋㅋㅋ 다음 섹션에서는 Sanctum을 사용할 때 주의해야 할 점들에 대해 알아볼 거예요. 기대되지 않나요? 😄

5. 보안 강화를 위한 추가 설정들 🔒

여러분, 지금까지 Sanctum의 기본 사용법과 꿀팁들을 알아봤는데요. 이제 보안을 한층 더 강화할 수 있는 추가 설정들에 대해 알아볼 거예요. 보안은 아무리 강조해도 지나치지 않으니까요! 😉

1. HTTPS 강제 적용

프로덕션 환경에서는 반드시 HTTPS를 사용해야 해요. Sanctum에서는 이를 쉽게 설정할 수 있어요.

config/sanctum.php 파일에 추가:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
    '%s%s',
    'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
    env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),

'middleware' => [
    'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
    'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],

'prefix' => 'api',

'guard' => 'web',

'expiration' => null,

'token_prefix' => '',

'except' => [],

'secure' => env('APP_ENV') !== 'local', // 이 부분이 중요해요!

이렇게 설정하면 로컬 환경을 제외한 모든 환경에서 HTTPS가 강제 적용돼요. 보안이 한층 강화되겠죠? 👍

2. 동시 로그인 제한

보안을 더욱 강화하고 싶다면, 한 계정에서 동시에 로그인할 수 있는 세션 수를 제한할 수 있어요.

새로운 미들웨어 생성 (app/Http/Middleware/LimitConcurrentSessions.php):

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class LimitConcurrentSessions
{
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            $user = Auth::user();
            $maxSessions = 3; // 최대 동시 세션 수

            $sessions = DB::table('sessions')
                ->where('user_id', $user->id)
                ->orderBy('last_activity', 'desc')
                ->get();

            if ($sessions->count() > $maxSessions) {
                $oldestSession = $sessions->last();
                DB::table('sessions')->where('id', $oldestSession->id)->delete();
            }
        }

        return $next($request);
    }
}

이 미들웨어를 커널에 등록하고 사용하면, 한 계정당 최대 3개의 동시 세션만 허용하게 돼요. 오래된 세션은 자동으로 로그아웃되죠. 보안과 사용자 경험 사이의 균형을 잡는 데 도움이 될 거예요. 😊

3. 비밀번호 정책 강화

Sanctum은 인증을 처리해주지만, 비밀번호 정책은 우리가 직접 설정해야 해요. Laravel의 기본 비밀번호 규칙을 강화해볼까요?

app/Rules/StrongPassword.php 파일 생성:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class StrongPassword implements Rule
{
    public function passes($attribute, $value)
    {
        return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $value);
    }

    public function message()
    {
        return 'The :attribute must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one number, and one special character.';
    }
}

이 규칙을 사용자 등록이나 비밀번호 변경 시 적용하면, 더욱 강력한 비밀번호를 사용하도록 유도할 수 있어요. 보안의 기본은 강력한 비밀번호니까요! 💪

4. 로그인 시도 제한

무차별 대입 공격을 방지하기 위해 로그인 시도 횟수를 제한하는 것도 좋아요. Laravel의 내장 기능을 사용해 쉽게 구현할 수 있죠.

LoginController.php 수정:

use Illuminate\Foundation\Auth\ThrottlesLogins;

class LoginController extends Controller
{
    use ThrottlesLogins;

    protected $maxAttempts = 5; // 최대 시도 횟수
    protected $decayMinutes = 10; // 잠금 시간 (분)

    // ... 기존 로그인 로직

    protected function sendLockoutResponse(Request $request)
    {
          네, 계속해서 로그인 시도 제한에 대한 내용을 이어가겠습니다.

<pre><code>    protected function sendLockoutResponse(Request $request)
    {
        $seconds = $this->limiter()->availableIn(
            $this->throttleKey($request)
        );

        return response()->json([
            'message' => 'Too many login attempts. Please try again in '.$seconds.' seconds.',
        ], 429);
    }
}

이렇게 설정하면 5번의 로그인 실패 후 10분 동안 로그인이 차단돼요. 무차별 대입 공격으로부터 사용자 계정을 보호할 수 있죠. 👮‍♂️

5. 토큰 회전(Token Rotation) 구현

장기간 사용되는 토큰의 보안 위험을 줄이기 위해 토큰 회전을 구현할 수 있어요. 이는 일정 기간마다 새로운 토큰을 발급하는 방식이에요.

새로운 미들웨어 생성 (app/Http/Middleware/RotateToken.php):

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RotateToken
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        if (Auth::check()) {
            $user = Auth::user();
            $tokenCreatedAt = $user->currentAccessToken()->created_at;

            if ($tokenCreatedAt->addDays(7)->isPast()) {
                $newToken = $user->createToken('api-token')->plainTextToken;
                $user->tokens()->where('id', $user->currentAccessToken()->id)->delete();

                $response->header('New-Token', $newToken);
            }
        }

        return $response;
    }
}

이 미들웨어를 사용하면 7일마다 새로운 토큰이 발급돼요. 클라이언트는 응답 헤더의 'New-Token' 값을 확인하고 새 토큰으로 교체해야 해요. 보안이 한층 강화되겠죠? 🔄

Sanctum 보안 강화 전략 Sanctum 보안 강화 전략 HTTPS 강제 동시 로그인 제한 강력한 비밀번호 로그인 시도 제한 토큰 회전 다층적 보안 체계

자, 여기까지가 Sanctum의 보안을 한층 더 강화할 수 있는 추가 설정들이에요. 어떠세요? 이 설정들을 적용하면 여러분의 애플리케이션이 훨씬 더 안전해질 거예요. 😊

물론 이게 전부는 아니에요. 보안은 끊임없이 발전하고 있으니, 항상 최신 보안 동향을 체크하고 필요한 업데이트를 해주는 것이 중요해요.

그리고 잊지 마세요! 이런 보안 설정들은 개발 단계에서부터 적용하는 것이 좋아요. 나중에 추가하려면 더 복잡해질 수 있거든요. 재능넷 같은 실제 서비스들도 이런 보안 설정들을 처음부터 고려했을 거예요.

자, 이제 여러분은 Sanctum 마스터를 넘어 보안 전문가가 된 것 같은데요? ㅋㅋㅋ 이 모든 지식을 여러분의 프로젝트에 적용해보세요. 훨씬 더 안전하고 견고한 애플리케이션을 만들 수 있을 거예요! 👨‍💻👩‍💻

여기까지 Laravel Sanctum을 활용한 SPA 인증에 대해 깊이 있게 알아봤어요. 이 글이 여러분의 개발 여정에 도움이 되었길 바라요. 항상 안전하고 즐거운 코딩하세요! 😄🚀

관련 키워드

  • Laravel Sanctum
  • SPA 인증
  • 토큰 기반 인증
  • CSRF 보호
  • 세션 관리
  • 다중 인증 가드
  • 사용자 지정 능력
  • HTTPS 강제
  • 동시 로그인 제한
  • 토큰 회전

지적 재산권 보호

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2025 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

JAVA,JSP,PHP,javaScript(jQuery), 등의 개발을 전문적으로 하는 개발자입니다^^보다 저렴한 금액으로, 최고의 퀄리티를 내드릴 것을 자신합니다....

안녕하세요^^ 저는 12년 경력의 프리랜서 퍼블리셔​&​디자이너 입니다. 반응형 웹표준 웹접근성 모바일 하드코딩 가능합니다....

안녕하세요.부동산, ​학원, 재고관리, ​기관/관공서, 기업, ERP, 기타 솔루션, 일반 서비스(웹, 모바일) 등다양한 분야에서 개발을 해왔습니...

10년차 php 프로그래머 입니다. 그누보드, 영카트 외 php로 된 솔루션들 커스터마이징이나 오류수정 등 유지보수 작업이나신규개발도 가능합...

📚 생성된 총 지식 13,409 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2025 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창