1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OAuth認証は、ユーザー認証と権限管理を安全に実装するための標準プロトコルです。また、マイクロサービス間でセキュアな通信を確保することも重要です。今回は、LaravelでのOAuth認証の実装と、サービス間でのセキュアな通信方法について記述します。

目次

  1. OAuth認証の導入
  2. Laravel Passportの設定と使用
  3. サービス間のセキュアな通信
  4. 実践プロジェクトの例

1. OAuth認証の導入

OAuth認証は、第三者のアプリケーションがユーザーのリソースにアクセスするためのトークンベースの認証プロトコルです。Laravelでは、Laravel Passportを使用してOAuth認証を簡単に実装できます。

2. Laravel Passportの設定と使用

Passportのインストール

まず、Laravel Passportをインストールします。

composer require laravel/passport

インストール後、Passportのサービスプロバイダをconfig/app.phpに追加します。

'providers' => [
    // 他のプロバイダ
    Laravel\Passport\PassportServiceProvider::class,
],

次に、マイグレーションを実行し、Passportのテーブルを作成します。

php artisan migrate
php artisan passport:install

Passportの設定

app/User.phpモデルにPassportのトレイトを追加します。

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

AuthServiceProviderでPassportルートを定義します。

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

API認証ミドルウェアの設定

config/auth.phpでAPI認証ガードを設定します。

'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

認証ルートの設定

routes/api.phpに認証ルートを追加します。

use Illuminate\Http\Request;

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

トークン発行のエンドポイント

ユーザー登録時にトークンを発行する例を示します。

app/Http/Controllers/Auth/RegisterController.php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        $token = $user->createToken('LaravelPassport')->accessToken;

        return response()->json(['token' => $token], 200);
    }
}

3. サービス間のセキュアな通信

トークンを使ったサービス間通信

サービス間で通信する際に、OAuthトークンを使用して認証を行います。Guzzleを使用して、トークン付きリクエストを送信します。

app/Http/Controllers/OrderController.php

namespace App\Http\Controllers;

use GuzzleHttp\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class OrderController extends Controller
{
    public function createOrder(Request $request)
    {
        $token = Auth::user()->createToken('OrderServiceToken')->accessToken;

        $client = new Client();
        $response = $client->post('http://127.0.0.1:8002/orders', [
            'headers' => [
                'Authorization' => 'Bearer ' . $token,
            ],
            'json' => [
                'user_id' => $request->user_id,
                'product_id' => $request->product_id,
                'quantity' => $request->quantity,
            ]
        ]);

        return response()->json(json_decode($response->getBody()), $response->getStatusCode());
    }
}

4. 実践プロジェクトの例

プロジェクト:OAuth認証とセキュアなサービス間通信

  1. ユーザーサービスでOAuth認証を設定
  2. 注文サービスでユーザーサービスからトークンを受け取り、注文を作成
  3. サービス間通信をセキュアに実装

routes/api.php

Route::middleware('auth:api')->group(function () {
    Route::post('/orders', [OrderController::class, 'createOrder']);
});

まとめ

この記事では、LaravelでのOAuth認証の実装方法と、サービス間でのセキュアな通信方法について記述しました。OAuthを使用することで、ユーザー認証と権限管理がよりセキュアになり、トークンを使ったサービス間通信により、マイクロサービスアーキテクチャでのデータのやり取りも安全に行えます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?