API 인증


ㅠㅠ 구성
토큰 생성

🎜
🎜🎜Configuration🎜🎜< /a>🎜
🎜

데이터베이스 준비

🎜 token 드라이버를 사용하기 전에 다음에 대한 마이그레이션을 생성해야 합니다. api_token 열이 users 테이블에 추가됩니다: 🎜
'api' => [   
     'driver' => 'token',    
     'provider' => 'users',    
     'hash' => true,
   ],
🎜마이그레이션이 생성된 후 migration Artisan 명령을 실행하세요. 🎜🎜
🎜
🎜🎜Token Generation🎜🎜api_token 열 추가 한 번 users 테이블에서 애플리케이션의 각 사용자에게 무작위 API 토큰을 할당할 수 있습니다. 이러한 토큰은 등록 중에 User 모델이 생성될 때 할당되어야 합니다. make:auth Artisan 명령어가 제공하는 인증 스캐폴딩을 사용할 때 RegisterControllercreate 메소드에서 이 작업을 수행할 수 있습니다: 🎜
<?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];   
       }
    }
🎜< a name= "hashing-tokens">🎜
🎜

해시 토큰

🎜위 예에서 API 토큰은 일반 텍스트 양식이 데이터베이스에 저장됩니다. SHA-256 해시를 사용하여 API 토큰을 해시하려면 api 감시자 구성의 hash 옵션을 true 로 설정하면 됩니다. api 가드는 config/auth.php 구성 파일에 정의되어 있습니다: 🎜
use Illuminate\Http\Request;
Route::middleware('auth:api')->get('/user', function(Request $request) { 
   return $request->user();
 });
🎜🎜

Generate Hash Token

해시 토큰을 사용하는 경우, 사용자 등록 시 API 토큰을 생성하면 안 됩니다. 대신 애플리케이션에 자체 API 토큰 관리 페이지를 구현해야 합니다. 이 페이지에서는 사용자가 API 토큰을 초기화하고 새로 고칠 수 있어야 합니다. 사용자가 초기화 또는 새로 고침 토큰을 요청할 때 토큰의 해시된 복사본을 데이터에 저장하고 토큰의 일반 텍스트 복사본을 보기/프런트 엔드 클라이언트에 반환하여 한 번 표시해야 합니다.

예를 들어, 특정 사용자에 대한 토큰을 초기화/새로 고치고 일반 텍스트 토큰을 JSON 응답으로 반환하는 컨트롤러 메서드는 다음과 같습니다.

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

{tip} 위 예의 API 토큰이 충분하기 때문입니다. 엔트로피, 해시된 토큰의 원래 값을 찾기 위해 "무지개 테이블"을 만드는 것은 비현실적입니다. 따라서 bcrypt와 같은 느린 해싱 방법을 사용할 필요가 없습니다. bcrypt 之类的慢散列方法:

路由保护

Laravel 包含一个 身份认证看守器 可以自动验证传入请求的 API 令牌。 你只需要在任何需要有效访问令牌的路由上指定 auth:api 中间件:

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

请求中传递令牌

有几种方法可以将 API 令牌传递给你的应用程序。 我们将在使用 Guzzle HTTP 库演示其用法时去讨论这些方法。 你可以根据应用程序的需要选择其中的任何方法。

请求参数

你的应用程序的 API 使用者可以将其令牌作为 api_token 查询字符串值:

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

请求负载

应用程序的 API 使用者可以在请求的表单参数中以 api_token 的形式包含其 API 令牌:

rrreee

Bearer 令牌

应用程序的 API 使用者可以在请求的  Authorization 头中提供其 API 令牌作为 Bearer

Route Guard

Laravel에는 들어오는 요청에 대해 API 토큰을 자동으로 확인할 수 있는 인증 감시자가 포함되어 있습니다. 유효한 액세스 토큰이 필요한 모든 경로에서 auth:api 미들웨어를 지정하면 됩니다.
rrreee🎜🎜🎜
🎜

요청에 토큰 전달

🎜 API 토큰을 애플리케이션에 전달하는 방법에는 여러 가지가 있습니다. Guzzle HTTP 라이브러리를 사용하여 사용법을 시연하면서 이러한 방법에 대해 논의하겠습니다. 애플리케이션의 요구 사항에 따라 이러한 방법 중 하나를 선택할 수 있습니다. 🎜