ハマログ

株式会社イーツー・インフォの社員ブログ

Laravel Passportを使ったOauthサーバ その2

今回はLaravel Passportを使ったOauthサーバの続きです。

認証設定

今回はクライアント認証するようにします。

クライアント認証利用設定

★追記★の1行をapp/Http/Kernel.phpに追加します。

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \App\Http\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'client' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class, ★追記★
    ];

ルーティングの設定

どの機能(URL)に認証を掛けるのかをroutes/api.phpに設定します。
今回はグループ設定でやってみました。

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ApplicantController;  ★追加 

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

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

★以下追加
Route::group(['middleware' => 'auth'], function () {
    Route::get('/applicant/{id}', [ApplicantController::class, 'show']);
});

テスト用のサーバ機能の作成

簡単な機能を作って認証が動くか確かめてみます。
今回はREST APIを想定してGETでもらったIDを返却するだけの簡単な機能を実装します。

テンプレートの作成

まずController作ります。

$ php artisan make:controller ApplicantController

実装

テンプレートに実装します。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
#use App\Applicant;

class ApplicantController extends Controller
{
    # ID表示
    public function show(Int $id)
    {
        $post = "id:$id";
        return response()->json($post);
    }
}

使ってみる

curlで動くか試してみます。
tokenは前回取得したtokenを使います。
tokenはどうやって送るかというとヘッダ情報の中に入れて送ります。
無事に認証が通ってURLの最後に入れたID(3)が表示されました。

$ curl -verbose -X GET -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIyIiwianRpIjoiN........' http://localhost:8000/api/applicant/3
Note: Unnecessary use of -X or --request, GET is already inferred.
*   Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000 (#0)
> GET /api/applicant/ HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.79.1
> Referer: rbose
> Content-Type: application/json
> Accept: application/json
> Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIyIiwianRpIjoiN........
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Host: localhost:8000
< Date: Wed, 12 Oct 2022 03:34:51 GMT
< Connection: close
< X-Powered-By: PHP/8.0.20
< Cache-Control: no-cache, private
< Date: Wed, 12 Oct 2022 03:34:51 GMT
< Content-Type: application/json
< X-RateLimit-Limit: 60
< X-RateLimit-Remaining: 59
< Access-Control-Allow-Origin: *
<
* Closing connection 0
"id:3"

ここでtokenが間違っていて認証が失敗すると401が帰ってきます。

* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Host: localhost:8000
< Date: Mon, 24 Oct 2022 06:06:00 GMT
< Connection: close
< X-Powered-By: PHP/8.0.20
< Cache-Control: no-cache, private
< Date: Mon, 24 Oct 2022 06:06:00 GMT
< Content-Type: application/json
< X-RateLimit-Limit: 60
< X-RateLimit-Remaining: 57
< Access-Control-Allow-Origin: *
<
* Closing connection 0
{"message":"Unauthenticated."}

何を設定するかがわかれば後は本当に簡単。皆様もお試しください。

LaravelLaravel PassportOAuthPassport

  at   2022年10月24日


関連記事

LaravelのFormからPUT / PATCH / DELETEリクエストをおくる

FormからREST APIを呼び出す画面を作成していたのですが、いまのところお…

「example.com」について

先日、弊社の品質管理部の中でこんな話題がありました。 試験の中で「存在しないメー…

Laravel 8.* のフォームリクエストでバリデーションチェック済みの値を整形してみる

突然ですが、フォームリクエストでバリデーションチェック済みの値を整形する必要に出…


← 前の投稿

次の投稿 →