Certification API
- Préparation de la database
- Génération à alliage dans la demande
- Paramètres de la demande
- Jeton du porteur Introduction
- Configuration
- Migration de base de données
Introduction
Par défaut, Laravel propose une solution simple d'authentification API via un jeton aléatoire attribué à chaque utilisateur de l'application. Dans votre fichier de configuration
config/auth.php
, vous avez défini un observateurapi
qui utilise le pilotetoken
. Ce pilote est chargé de vérifier le jeton API sur les demandes entrantes et de vérifier qu'il correspond au jeton attribué par l'utilisateur dans la base de données.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
Remarque : Bien que Laravel soit livré avec une simple protection d'authentification basée sur des jetons, nous vous recommandons fortement d'envisager Laravel Passport pour implémenter des applications de production robustes qui fournissent une authentification API. 🎜
🎜🎜Configuration🎜🎜< /a>🎜🎜Préparation de la base de données
🎜Avant d'utiliser le pilotetoken
, vous devez créer une migration pour it Une colonneapi_token
sera ajoutée à votre tableusers
: 🎜'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => true, ],
🎜Une fois la migration créée, exécutez la commandemigrate
Artisan. 🎜🎜🎜🎜🎜Génération de jetons🎜🎜Ajouter la colonneapi_token
une fois dans votre tableusers
, vous pouvez attribuer des jetons API aléatoires à chaque utilisateur de votre application. Ces jetons doivent être attribués lorsque le modèleUtilisateur
est créé lors de l'inscription. Lorsque vous utilisez l'échafaudage d'authentification fourni par la commandemake:auth
Artisan, cela peut être fait dans la méthodecreate
deRegisterController
: 🎜<?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">🎜🎜Jetons de hachage
🎜Dans l'exemple ci-dessus, le jeton API est dans texte brut Le formulaire est stocké dans la base de données. Si vous souhaitez hacher des jetons API à l'aide du hachage SHA-256, vous pouvez définir l'optionhash
de la configuration de l'observateurapi
surtrue
. La gardeapi
est définie dans votre fichier de configurationconfig/auth.php
: 🎜use Illuminate\Http\Request; Route::middleware('auth:api')->get('/user', function(Request $request) { return $request->user(); });
🎜🎜Générer un jeton de hachage
Lorsque vous utilisez des jetons de hachage, vous ne devez pas générer de jetons API lors de l'enregistrement de l'utilisateur. Au lieu de cela, vous devez implémenter votre propre page de gestion des jetons API dans votre application. Cette page doit permettre aux utilisateurs d'initialiser et d'actualiser leurs jetons API. Lorsqu'un utilisateur effectue une demande de jeton d'initialisation ou d'actualisation, vous devez stocker une copie hachée du jeton dans les données et renvoyer une copie en texte brut du jeton au client d'affichage/frontal pour l'afficher une fois.
Par exemple, une méthode de contrôleur qui initialise/actualise un jeton pour un utilisateur donné et renvoie le jeton en texte brut sous forme de réponse JSON pourrait ressembler à ceci :
$response = $client->request('GET', '/api/user?api_token='.$token);
{tip} Parce que le jeton API dans l'exemple ci-dessus en a suffisamment Entropie, il n'est pas pratique de créer des « tables arc-en-ciel » pour retrouver la valeur originale d'un jeton haché. Par conséquent, il n'est pas nécessaire d'utiliser des méthodes de hachage lentes comme
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
🎜Passer des jetons dans les requêtes
🎜Il existe plusieurs façons de transmettre des jetons API à votre application. Nous discuterons de ces méthodes tout en démontrant leur utilisation à l'aide de la bibliothèque HTTP Guzzle. Vous pouvez choisir l'une de ces méthodes en fonction des besoins de votre application. 🎜🎜🎜Paramètres de requête🎜🎜Les consommateurs d'API de votre application peuvent fournir leur jeton en tant que valeur de chaîne de requêteapi_token
: 🎜 rrreee🎜🎜Request Payload🎜🎜Les utilisateurs API d'une application peuvent inclure leur jeton API dans le paramètre de formulaire de la requête sous la forme deapi_token
Token : 🎜 rrreee🎜🎜Bearer Token 🎜🎜Les consommateurs API d'une application peuvent fournir leur jeton API dans l'en-têteAuthorization
de la carte de demande en tant queBearer
: 🎜rrreee🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜
- "Génération de jetons"