API認証


トークン生成

ハッシュ トークン
  • ルート保護
    • リクエストでトークンを渡します
    • はじめに

      Laravel は、デフォルトで、アプリケーションの各ユーザーに割り当てられたランダムなトークンを介した API 認証のシンプルなソリューションを提供します。 config/auth.php 構成ファイルでは、token ドライバーを使用する api ウォッチャーが定義されています。このドライバーは、受信リクエストの API トークンをチェックし、データベース内でユーザーが割り当てたトークンと一致することを確認する役割を果たします。

      注: Laravel には単純なトークンベースの認証保護が同梱されていますが、API 認証を提供する堅牢な運用実装のために Laravel Passport を検討することを強くお勧めします。 ###########################構成##################### # #データベースの準備

      token ドライバーを使用する前に、api_token## を

      users
      テーブル # 列に追加する移行を作成する必要があります。
      Schema::table('users', function ($table) {  
        $table->string('api_token', 80)->after('password')    
                              ->unique()                        
                              ->nullable()                        
                              ->default(null);
                     });

      移行が作成されたら、

      mite

      Artisan コマンドを実行します。

      トークン生成api_token 列を users ## に追加します。 # テーブルの後に、アプリケーション内の各ユーザーにランダムな API トークンを割り当てることができます。これらのトークンは、登録中に User

      モデルが作成されるときに割り当てる必要があります。

      make:auth Artisan コマンドによって提供される認証スキャフォールディングを使用する場合、これは RegisterController

      create メソッドで実行できます:

      use Illuminate\Support\Str;use Illuminate\Support\Facades\Hash;
      /**
       * 在有效注册之后创建一个新用户实例:
       *
       * @param  array  $data
       * @return \App\User
       */
       protected function create(array $data){  
           return User::create([     
              'name' => $data['name'],        
              'email' => $data['email'],        
              'password' => Hash::make($data['password']),        
              'api_token' => Str::random(60),   
               ]);
           }

      ハッシュ トークン上記の例では、API トークンはプレーン テキストとしてデータベースに保存されます。 SHA-256 ハッシュを使用して API トークンをハッシュする場合は、 api ウォッチャー構成の hash オプションを true に設定できます。 api ウォッチャーは、config/auth.php

      構成ファイルで定義されます:

      'api' => [   
           'driver' => 'token',    
           'provider' => 'users',    
           'hash' => true,
         ],

      ハッシュ トークンの生成

      ハッシュ トークンを使用する場合、ユーザー登録中に API トークンを生成しないでください。代わりに、アプリケーションに独自の API トークン管理ページを実装する必要があります。このページでは、ユーザーが API トークンを初期化および更新できるようにする必要があります。ユーザーが初期化またはリフレッシュ トークン リクエストを行うときは、トークンのハッシュされたコピーをデータに保存し、一度表示するためにトークンのプレーン テキスト コピーをビュー/フロントエンド クライアントに返す必要があります。

      たとえば、特定のユーザーのトークンを初期化/更新し、プレーン テキスト トークンを JSON 応答として返すコントローラー メソッドは次のようになります:

      <?php
          namespace App\Http\Controllers;
          use Illuminate\Support\Str;
          use Illuminate\Http\Request;
          class ApiTokenController extends Controller{   
           /**
           * 更新已经验证过的用户的 API 令牌。
           *
           * @param  \Illuminate\Http\Request  $request
           * @return array
           */  
         public function update(Request $request)
           {     
              $token = Str::random(60);        
              $request->user()->forceFill([       
                   'api_token' => hash('sha256', $token),       
                    ])->save();        
              return ['token' => $token];   
             }
          }

      {tip}上記の例の API トークンには十分なエントロピーがあるため、ハッシュ化されたトークンの元の値を見つけるために「レインボー テーブル」を作成するのは非現実的です。したがって、bcrypt:

      ルート保護# のような低速ハッシュ方式を使用する必要はありません。

      ##Laravel には、受信リクエストの API トークンを自動的に検証できる認証ウォッチャーが含まれています。必要なのは、有効なアクセス トークンを必要とするルート上で

      auth:api ミドルウェアを指定することだけです:

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

      #リクエストでトークンを渡す

      API トークンをアプリケーションに渡す方法はいくつかあります。これらのメソッドについては、Guzzle HTTP ライブラリを使用した使用法を示しながら説明します。アプリケーションのニーズに基づいて、これらの方法のいずれかを選択できます。

      リクエスト パラメーター

      アプリケーションの API コンシューマーは、トークンを

      api_token クエリ文字列値として提供できます:

      $response = $client->request('GET', '/api/user?api_token='.$token);

      リクエスト ペイロード

      アプリケーションの API コンシューマは、リクエストのフォーム パラメータに

      api_token:

      $response = $client->request('POST', '/api/user', [  
           'headers' => [     
              'Accept' => 'application/json', 
             ],    
           'form_params' => [    
               'api_token' => $token,  
              ],
        ]);

      ## の形式で API トークンを含めることができます。
      #ベアラー トークン

      アプリケーションの API コンシューマーは、リクエスト トークンの

      Authorization

      ヘッダーの ベアラーとして API トークンを提供できます:

      $response = $client->request('POST', '/api/user', [ 
         'headers' => [    
             'Authorization' => 'Bearer '.$token,        
             'Accept' => 'application/json',   
            ],
       ]);
      この記事は、

      LearnKu.com
      Web サイトで初めて公開されました。