API 인증
ㅠㅠ 구성
- 해시 토큰
- 경로 보호
소개
기본적으로 Laravel은 애플리케이션의 각 사용자에게 할당된 무작위 토큰을 통해 API 인증을 위한 간단한 솔루션을 제공합니다.
config/auth.php
구성 파일에서token
드라이버를 사용하는api
감시자를 정의했습니다. 이 드라이버는 들어오는 요청에서 API 토큰을 확인하고 데이터베이스의 사용자 할당 토큰과 일치하는지 확인하는 일을 담당합니다.config/auth.php
配置文件中,已经定义了一个使用token
驱动的api
看守器。 这个驱动程序负责检查传入请求上的 API 令牌,并验证它是否匹配数据库中用户分配的令牌。注意: 虽然 Laravel 附带了一个简单的基于令牌的身份验证保护,但我们强烈建议您考虑 Laravel Passport 来实现提供 API 身份验证的健壮的生产应用程序。
配置
数据库准备
在使用
token
驱动程序之前,你需要 创建一个迁移 它会在你的users
表中添加一个api_token
列:Schema::table('users', function ($table) { $table->string('api_token', 80)->after('password') ->unique() ->nullable() ->default(null); });
迁移创建后,运行
migrate
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
참고: Laravel은 간단한 토큰 기반 인증 보호 기능을 제공하지만 API 인증을 제공하는 강력한 프로덕션 애플리케이션을 구현하려면 Laravel Passport를 고려하는 것이 좋습니다. 🎜
🎜🎜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 명령어가 제공하는 인증 스캐폴딩을 사용할 때RegisterController
의create
메소드에서 이 작업을 수행할 수 있습니다: 🎜<?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 使用者可以在请求的表单参数中以
rrreeeapi_token
的形式包含其 API 令牌:Bearer 令牌
应用程序的 API 使用者可以在请求的
rrreee🎜🎜🎜Authorization
头中提供其 API 令牌作为Bearer
🎜요청에 토큰 전달
🎜 API 토큰을 애플리케이션에 전달하는 방법에는 여러 가지가 있습니다. Guzzle HTTP 라이브러리를 사용하여 사용법을 시연하면서 이러한 방법에 대해 논의하겠습니다. 애플리케이션의 요구 사항에 따라 이러한 방법 중 하나를 선택할 수 있습니다. 🎜🎜🎜요청 매개변수🎜🎜 애플리케이션의 API 소비자는 자신의 토큰을api_token
쿼리 문자열 값으로 제공할 수 있습니다: 🎜 rrreee🎜🎜Request payload🎜🎜API 사용자는 API 토큰을api_token
형식으로 요청의 양식 매개변수에 포함할 수 있습니다. 토큰: 🎜 rrreee🎜🎜Bearer Token 🎜🎜API 소비자는 요청 카드의Authorization
헤더에 API 토큰을Bearer
토큰: 🎜rrreee🎜이 글은 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜