Laravel 開発: Laravel Passport と JWT を使用して API 認証を実装するにはどうすればよいですか?

WBOY
リリース: 2023-06-13 23:41:58
オリジナル
1191 人が閲覧しました

Laravel 開発: Laravel Passport と JWT を使用して API 認証を実装するにはどうすればよいですか?

API (アプリケーション プログラミング インターフェイス) 認証は、今日のインターネット アプリケーションにおける一般的な要件です。人気の PHP フレームワークとして、Laravel は API 認証の実装に役立つ 2 つのツール、Laravel Passport と JWT (JSON Web Tokens) を提供します。

この記事では、Laravel PassportとJWTを使ってAPI認証を実装する方法を紹介します。次のコンテンツでは、これら 2 つのツールの基本概念と、それらを Laravel アプリケーションで構成および使用する方法を理解します。

Laravelパスポートとは何ですか?

Laravel Passport は、Laravel フレームワーク用に特別に開発された OAuth2 サーバーで、API 認証システムを迅速かつ安全に構築するのに役立ちます。 Passport は、認証プロセスを実行するための一連の API を提供し、OAuth2 プロトコルで指定された一連の認証方法を内部的に実装しています。

このうち、OAuth2 はプロキシ認証を使用する標準プロトコルです。プロキシ認可は、ユーザーに代わってリソースへのアクセスを取得するための認可メカニズムです。 OAuth2 プロトコルは、ユーザーに代わって保護されたリソースにアクセスするために、サードパーティのアプリケーションに「アクセス トークン」を発行します。したがって、Passport は実際には Laravel アプリケーションで OAuth2 認証サーバーの役割を果たします。

JWT とは何ですか?

JWT (JSON Web Tokens) は、分散ネットワーク環境における認証と認可のためのオープン標準 (RFC 7519) です。 JWT は、クライアントとサーバー間で認証されたユーザー ID 情報とクレームを渡すために一般的に使用されます。 JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。

通常、ヘッダーには JWT のタイプと使用される暗号化アルゴリズムが含まれ、ペイロードにはユーザー ID 情報とクレームが含まれ、署名は JWT の信頼性を検証するために使用されます。認証に JWT を使用する場合、サーバーは JWT 内の情報を復号化することでユーザーの ID を判断し、API 認証を実現します。

Laravel Passport と JWT の設定

Laravel Passport と JWT を API 認証に使用する前に、まず Laravel アプリケーションで設定する必要があります。具体的な設定手順は次のとおりです:

ステップ 1: Laravel Passport と tymon/jwt-auth をインストールする

composer を使用して、コマンドライン ツールで Laravel Passport と tymon/jwt-auth をインストールします。

composer require laravel/passport
composer require tymon/jwt-auth
ログイン後にコピー

ステップ 2: Laravel Passport を構成する

config/app.php ファイルに、次のサービス プロバイダーを追加します。

'providers' => [
    ...
    LaravelPassportPassportServiceProvider::class,
],
ログイン後にコピー

次に、次のコマンドを実行して、 Passport データ テーブル:

php artisan migrate
ログイン後にコピー

Passport のデフォルトの認証方法「Password Grant」の場合、「PassportHasApiTokens」(Passport のデフォルトのユーザー認証 Trait) を User モデルに追加します。 User.php ファイルを開き、次の内容を追加します。

use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    ...
}
ログイン後にコピー

ステップ 3: JWT を構成する

まず、config/app.php ファイルに、JWTServiceProvider:

'providers' => [
    ...
    TymonJWTAuthProvidersLaravelServiceProvider::class,
],
ログイン後にコピー
## を追加します。 #次に、次のコマンドを実行して、JWT に必要な秘密キーを生成します。

php artisan jwt:secret
ログイン後にコピー

config/auth.php ファイルに、jwt ガード構成を追加し (ガード ガード オプションとして jwt を使用)、デフォルトの認証ドライバー 「jwt」に設定します:

'guards' => [
    ...
    'jwt' => [
        'driver' => 'jwt',
        'provider' => 'users'
    ],
],
...
'defaults' => [
    'guard' => 'jwt',
    ...
],
ログイン後にコピー

config/auth.php ファイルに、JWT ユーザー プロバイダーのユーザー設定を追加します (Eloquent モデルを使用するように指示します):

'providers' => [
    ...
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class
    ]
],
ログイン後にコピー

Laravel を使用しますPassport と JWT API 認証

準備作業が完了したら、Laravel Passport と JWT を使用して API 認証を実装できます。具体的な操作手順は以下のとおりです。

ステップ 1: API ルーティングの登録

まず、routes/api.php ファイルに API ルーティングを登録します。たとえば、ユーザー情報を取得するための GET ルートを定義します。

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
ログイン後にコピー

ここでは Laravel のミドルウェア auth:api が使用されており、認証されたユーザーからのリクエストが確実に通過できるようにします。ルーティング ミドルウェアを使用すると、この認証ステップをルートに追加します。

ステップ 2: アクセス トークンを作成する

ユーザーが API にアクセスするにはアクセス トークンが必要です。パスワード認証アクセス トークンを使用する必要があります。具体的な実装手順は次のとおりです:

まず、ユーザーが提供したユーザー名とパスワードを受け取るルートを定義する必要があります:

Route::post('/login', function (Request $request) {
    $http = new GuzzleHttpClient;

    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'username' => $request->username,
            'password' => $request->password,
            'scope' => '',
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});
ログイン後にコピー

In上記のコードでは、GuzzleHttp を使用します。クライアントは POST リクエストを送信してアクセス トークンを取得します。このうち、grant_type は「password」にする必要があり、client_id と client_secret はそれぞれ Laravel Passport で適用される ID と Secret に対応します。リクエストが成功すると、API にアクセスするためのユーザーのアクセス トークン access_token を含む JSON 応答が返されます。

ステップ 3: API リクエストの開始

取得したトークン access_token を使用して、API にリクエストを送信し、ユーザーの ID を確認し、保護されたリソースを取得できます。 API にリクエストを行うときは、ヘッダーに認証キーと値のペアを追加する必要があります。その値は「Bearer access_token」です。例:

$accessToken = 'your-access-token';
$response = $http->withHeaders([
    'Authorization' => 'Bearer ' . $accessToken
])->get('http://your-app.com/api/user');
ログイン後にコピー
リクエストが成功すると、API はユーザー情報を返します。

結論

Laravelアプリケーションでは、Laravel Passportが強力なOAuth2認証プロトコルとAPI認証機能を提供しており、JWTは安全で便利な認証方式です。実際の開発では、Laravel PassportとJWTを組み合わせて使用​​することで、APIのセキュリティと信頼性を向上させ、悪意のある攻撃者によるユーザーデータの盗難や改ざんから保護することができます。

以上がLaravel 開発: Laravel Passport と JWT を使用して API 認証を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート