APIトークン認証
導入
この記事では、APIトークンの認証について図を用いて分かりやすく解説していきます。
API トークン認証の仕組みを大まかに理解した後、Laravel Sanctum を使用した API トークン認証の仕組みをコードベースで説明します。
この記事を読むことで、次のことがわかります
- API トークン認証の仕組み
- Laravel Sanctum のインストール方法
- ユーザー登録時とログイン時のAPIトークンの生成
- アクセスを制限し、リソースの所有権を確認するための API トークン認証
- ログアウト時の API トークンの削除
API トークン認証の仕組み
1.ユーザー登録・ログインリクエスト
クライアントはユーザーのログイン情報 (電子メール、パスワードなど) を認証サーバーに送信します。
2.ユーザー認証
認証サーバーはログイン情報を検証して、ユーザーが存在するかどうか、およびパスワードが正しいかどうかを確認します。
3. API トークンの生成
ログインに成功すると、認証サーバーはユーザーの API トークンを生成します。生成された API トークンは、personal_access_tokens テーブルに保存されます。
4. APIリクエスト
クライアントは、生成された API トークンを Authorization ヘッダーに添付して、API リクエストをリソース サーバーに送信します。
5. APIトークンの検証
リソースサーバーは API トークンを検証します。 API トークンが有効な場合、リクエストは処理されます。
6. API レスポンス
リソースサーバーは API 応答を返します。
Laravel Sanctumのインストール方法
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トークンを生成する
サンプルコード
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 ]; }
ユーザー登録
- ユーザー登録
- 新しいユーザーが users テーブルに保存されます。
- API トークンが生成されます。 (トークン作成)
- 生成された API トークンとユーザー情報はpersonal_access_tokens テーブルに保存され、API トークンがユーザーに提供されます。
サンプルコード
api.php
*Route*::post('/login', [*AuthController*::class, 'login']);
AuthController.php
sail php artisan install:api
ユーザーログイン
- ユーザーログイン。
- ユーザーが users テーブルに存在するかどうかを確認します。
- ログインに成功すると API トークンが生成されます。 (トークン作成)
- 生成された API トークンとユーザー情報はpersonal_access_tokens テーブルに保存され、API トークンがユーザーに提供されます。
*注意:ユーザーがログインするたびに、新しい API トークンが生成されます。
APIトークンの生成
Postman を使用して、次の条件で API リクエストを送信し、応答を確認します。
ログインに成功すると、API トークンが生成されます。
personal_access_tokens テーブルをチェックして、ログイン ユーザーの名前と API トークンが保存されていることを確認できます。
*注意: API 応答のトークンは、データベースに保存されるときにハッシュされるため、personal_access_tokens テーブルのトークンとは異なります。
APIトークン認証
- ユーザーは API リクエストを送信し、Authorization ヘッダーに API トークンを含めます。
- auth:sanctum ミドルウェアは、API リクエストから受け取った API トークンを、personal_access_tokens テーブルに保存されている API トークンと照合します。
- API トークンが正常に認証されると、リソース サーバーは API リクエストを処理します。
- 認証されたユーザーは投稿を更新または削除できます。
- リソースサーバーは API 応答を返します。
ポスト機能へのアクセスを制限する
以下は、ユーザーに関連付けられた投稿の CRUD 処理のサンプルコードです。
サンプルコード: PostController.php
Laravel Sanctum を使用して、ログインしたユーザーのみがユーザーに関連付けられた投稿を作成、編集、削除できるようにアクセスを制限します。
実際の API リクエストを送信して、API トークン認証が正しく実行されていることを確認します。
アクセス制御標準
ユーザーAPI
- インデックス、表示 これらのアクションは一般に公開された情報を提供し、ユーザー エクスペリエンスと SEO を向上させるために API トークン認証を必要としません。
- 保存、更新、削除 不正アクセスを防止し、データの整合性を維持するには、API トークン認証が必要です。
管理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 では、リクエストが Authorization ヘッダーにトークンを含めて送信される必要があります。
所有権の確認後の確認
API トークン認証によりユーザーのアクセス制限が実装されました。
しかし、まだ問題が残っています。
現在の状態では、認証されたユーザーは別のユーザーの投稿を更新または削除できます。
ユーザーが投稿の所有権を持っていることを確認するプロセスを追加します。
- ユーザーは API リクエストを送信し、Authorization ヘッダーに API トークンを含めます。
- auth:sanctum ミドルウェアは、API リクエストから受け取った API トークンを、personal_access_tokens テーブルに保存されている API トークンと照合します。
- auth:sanctum ミドルウェアは、API トークンに関連付けられたユーザーを取得し、このユーザーがターゲットの投稿の所有権を持っているかどうかを確認します。
- API トークンが正常に認証され、ユーザーがターゲット投稿の所有権を持っている場合、リソース サーバーは API リクエストを処理します。
- 投稿の所有権を持つ認証されたユーザーは、投稿を更新および削除できます。
- リソースサーバーは API 応答を返します。
コーディング
投稿の所有権を持つユーザーのみが投稿を更新および削除できるように、Laravel ポリシー ファイルに承認ロジックを記述します。
PostController.php
sail php artisan install:api
- リクエストの受信
- ユーザーは API リクエストを送信し、Authorization ヘッダーに API トークンを含めます。
- トークンの検証
- リソースサーバーは API リクエストの Authorization ヘッダーから API トークンを取得します。 次に、リクエストから受け取った API トークンが、personal_access_tokens テーブルに保存されている API トークンと一致することを検証します。
- ユーザー識別
- トークンが有効な場合、そのトークンに関連付けられたユーザーが識別されます。 $request->user() メソッドで識別されたユーザーを取得できます。
- ポリシーの呼び出し Gate::authorize メソッドは、認証されたユーザーとリソース オブジェクトを引数としてポリシーのメソッドに渡します。
PostPolicy.php
sail artisan migrate
modifyメソッド:
- 引数:
- $user: 現在認証されているユーザーのインスタンス。
- $post: Post モデルのインスタンス。
- ロジック:
- 現在認証されているユーザーが指定された投稿の所有権を持っているかどうかを確認します。
他のユーザーの投稿を更新する
- 更新 API エンドポイントを投稿するためのパス パラメーターとして投稿 ID を設定します。
- この投稿を所有していないユーザーのトークンを Authorization ヘッダーに含めます。
- あなたが投稿の所有者ではないことを示す 403 エラー メッセージを返します。
ログアウト時のAPIトークンの削除
ログアウトの流れ
- ユーザーが API リクエストを送信し、認可ヘッダーに API トークンを含めます
- auth:sanctum ミドルウェアは、API リクエストから受け取った API トークンを、personal_access_tokens テーブルに保存されている API トークンと照合します。
- API トークンが正常に認証されると、リソース サーバーは API リクエストを処理します。
- 認証されたユーザーの API トークンをpersonal_access_tokens テーブルから削除します。
- リソースサーバーは API 応答を返します。
コーディング
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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

PHPには4つの主要なエラータイプがあります。1。notice:わずかなものは、未定義の変数へのアクセスなど、プログラムを中断しません。 2。警告:通知よりも深刻で、ファイルを含むなど、プログラムを終了しません。 3。ファタラー:最も深刻なのは、機能を呼び出すなど、プログラムを終了します。 4。ParseError:構文エラーは、エンドタグの追加を忘れるなど、プログラムの実行を防ぎます。

PHPでは、include、require、include_once、require_onceの違いは次のとおりです。1)include警告を生成し、実行を継続します。これらの機能の選択は、ファイルの重要性と、重複包含を防ぐために必要かどうかに依存します。合理的な使用は、コードの読みやすさと保守性を向上させることができます。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。
