이 글에서는 API 토큰 인증을 다이어그램을 이용하여 이해하기 쉽게 설명하겠습니다.
API 토큰 인증이 어떻게 작동하는지 대략적으로 이해한 후, Laravel Sanctum을 사용하여 API 토큰 인증이 어떻게 작동하는지 코드 기반으로 설명하겠습니다.
이 기사를 읽으면 다음 내용을 배울 수 있습니다
클라이언트는 사용자의 로그인 정보(예: 이메일, 비밀번호)를 인증 서버로 보냅니다.
인증 서버는 로그인 정보를 확인하여 사용자가 존재하는지, 비밀번호가 맞는지 확인합니다.
로그인에 성공하면 인증 서버가 사용자를 위한 API 토큰을 생성합니다. 생성된 API 토큰은 personal_access_tokens 테이블에 저장됩니다.
클라이언트는 생성된 API 토큰을 Authorization 헤더에 첨부하여 리소스 서버에 API 요청을 보냅니다.
리소스 서버는 API 토큰을 확인합니다. API 토큰이 유효하면 요청이 처리됩니다.
리소스 서버가 API 응답을 반환합니다.
sail php artisan install:api
이 명령은 Laravel 프로젝트에서 API 토큰 인증에 필요한 api.php 파일과 마이그레이션 파일을 생성합니다.
그런 다음 마이그레이션을 실행합니다.
sail artisan migrate
personal_access_tokens 테이블이 생성됩니다.
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
api.php
Route::post('/register', [AuthController::class, 'register']);
AuthController.php
public function register(Request $request) { $fields = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed' ]); $user = User::create($fields); $token = $user->createToken($request->name); return [ 'user' => $user, 'token' => $token->plainTextToken ]; }
api.php
*Route*::post('/login', [*AuthController*::class, 'login']);
AuthController.php
sail php artisan install:api
*참고: 사용자가 로그인할 때마다 새로운 API 토큰이 생성됩니다.
Postman을 사용하여 다음 조건으로 API 요청을 보내 응답을 확인합니다.
로그인에 성공하면 API 토큰이 생성됩니다.
personal_access_tokens 테이블을 보면 로그인한 사용자의 이름과 API 토큰이 저장되어 있는 것을 확인할 수 있습니다.
*참고: API 응답의 토큰은 데이터베이스에 저장될 때 해시되기 때문에 personal_access_tokens 테이블의 토큰과 다릅니다.
다음은 사용자와 관련된 게시물에 대한 CRUD 프로세스의 샘플 코드입니다.
샘플 코드: PostController.php
Laravel Sanctum을 사용하여 로그인한 사용자만 해당 사용자와 관련된 게시물을 생성, 편집, 삭제할 수 있도록 액세스를 제한하세요.
실제 API 요청을 보내 API 토큰 인증이 올바르게 수행되었는지 확인하세요.
라우팅 파일에 다음을 작성하여 apiResource에 설정된 게시물의 모든 엔드포인트에 대한 액세스를 제한할 수도 있습니다.
api.php
sail php artisan install:api
sail artisan migrate
이 경우 PostController의 저장, 업데이트 및 삭제 작업에 대해서만 API 토큰 인증을 설정하려고 합니다. 이렇게 하려면 PostController에서 생성자 메서드를 만들고 index 및 show를 제외한 모든 작업에 auth:sanctum 미들웨어를 적용하세요.
PostController.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
이제 사용자는 게시물을 생성, 업데이트, 삭제할 때 요청에 토큰을 포함해야 합니다.
이 설정을 테스트하면서 게시물 작성을 위해 인증 토큰 없이 요청을 보내면 "인증되지 않음" 메시지와 함께 401 오류가 반환되고 게시물 작성이 실패합니다.
인증 토큰이 포함되어 있으면 데이터가 성공적으로 생성됩니다.
마찬가지로 게시물 업데이트 및 삭제를 위한 API에서는 승인 헤더의 토큰과 함께 요청을 보내야 합니다.
API 토큰 인증을 통해 사용자 접근 제한이 구현되었습니다.
그러나 여전히 문제가 있습니다.
현재 상태에서는 인증된 사용자가 다른 사용자의 게시물을 업데이트하거나 삭제할 수 있습니다.
사용자가 게시물의 소유권을 가지고 있는지 확인하는 프로세스를 추가하세요.
글의 소유권을 가진 사용자만이 글을 업데이트하고 삭제할 수 있도록 Laravel 정책 파일에 인증 로직을 작성하세요.
PostController.php
sail php artisan install:api
PostPolicy.php
sail artisan migrate
방법 수정:
api.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
로그아웃 라우팅을 위해 auth::sanctum 미들웨어를 적용하고 API 토큰 인증을 설정합니다.
AuthController.php
Route::post('/register', [AuthController::class, 'register']);
서버는 데이터베이스에서 현재 API 토큰을 삭제합니다. 이렇게 하면 토큰이 무효화되어 다시 사용할 수 없습니다.
서버는 로그아웃이 성공했다는 응답을 클라이언트에 반환합니다.
이 글에서는 API 토큰 인증을 다이어그램을 이용하여 이해하기 쉽게 설명했습니다.
Laravel Sanctum을 활용하면 클라이언트가 세션 기반 인증과 다른 유연성으로 개별 사용자에게 액세스 권한을 부여할 수 있는 API 토큰을 사용하여 간단하고 안전한 인증을 달성할 수 있습니다. 미들웨어와 정책을 사용하면 API 요청을 효율적으로 보호하고, 액세스를 제한하고, 리소스 소유권을 확인할 수도 있습니다.
위 내용은 API 토큰 인증의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!