pensijilan API
- database Preparation
- token generasi tokenhhh
- generate hash token
- route protection dalam permintaan Pengenalan
- Konfigurasi
- Migrasi Pangkalan Data Token
Pengenalan
Secara lalai, Laravel menyediakan penyelesaian mudah untuk pengesahan API melalui token rawak yang diberikan kepada setiap pengguna aplikasi. Dalam fail konfigurasi
config/auth.php
anda, anda telah menentukan pemerhatiapi
yang menggunakan pemacutoken
. Pemacu ini bertanggungjawab untuk menyemak token API pada permintaan masuk dan mengesahkan bahawa ia sepadan dengan token yang diberikan pengguna dalam pangkalan data.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
Nota: Walaupun Laravel dihantar dengan perlindungan pengesahan berasaskan token yang ringkas, kami amat mengesyorkan agar anda mempertimbangkan Laravel Passport untuk melaksanakan aplikasi pengeluaran teguh yang menyediakan pengesahan API. 🎜
🎜🎜Configuration🎜🎜< /a>🎜🎜Penyediaan pangkalan data
🎜Sebelum menggunakan pemacutoken
, anda perlu membuat migrasi untuk la Lajurapi_token
akan ditambahkan pada jadualpengguna
anda: 🎜'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => true, ],
🎜Selepas migrasi dibuat, jalankan perintahmigrate
Artisan. 🎜🎜🎜🎜🎜Penjanaan token🎜🎜Tambah lajurapi_token
Sekali dalam jadualpengguna
anda, anda boleh menetapkan token API rawak kepada setiap pengguna dalam aplikasi anda. Token ini harus diberikan apabila modelUser
dibuat semasa pendaftaran. Apabila menggunakan perancah pengesahan yang disediakan oleh perintahmake:auth
Artisan, ini boleh dilakukan dalam kaedahcreate
RegisterController
: 🎜<?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">🎜🎜Token cincang
🎜Dalam contoh di atas, token API berada dalam teks biasa Borang disimpan dalam pangkalan data. Jika anda ingin mencincang token API menggunakan cincang SHA-256, anda boleh menetapkan pilihancincang
bagi konfigurasi pemerhatiapi
kepadatrue
. Pengawalapi
ditakrifkan dalam fail konfigurasiconfig/auth.php
anda: 🎜use Illuminate\Http\Request; Route::middleware('auth:api')->get('/user', function(Request $request) { return $request->user(); });
🎜🎜Jana Token Hash
Apabila menggunakan token cincang, anda tidak seharusnya menjana token API semasa pendaftaran pengguna. Sebaliknya, anda perlu melaksanakan halaman pengurusan token API anda sendiri dalam aplikasi anda. Halaman ini harus membenarkan pengguna untuk memulakan dan menyegarkan semula token API mereka. Apabila pengguna membuat permulaan atau menyegarkan semula permintaan token, anda harus menyimpan salinan cincang token dalam data dan mengembalikan salinan teks biasa token kepada klien paparan/depan untuk paparan sekali.
Sebagai contoh, kaedah pengawal yang memulakan/menyegarkan token untuk pengguna tertentu dan mengembalikan token teks biasa sebagai respons JSON mungkin kelihatan seperti ini:
$response = $client->request('GET', '/api/user?api_token='.$token);
{tip} Kerana token API dalam contoh di atas mempunyai cukup Entropi, adalah tidak praktikal untuk mencipta "jadual pelangi" untuk mencari nilai asal token yang dicincang. Oleh itu, tidak perlu menggunakan kaedah pencincangan perlahan seperti
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
🎜Meluluskan token dalam permintaan
🎜Terdapat beberapa cara untuk menghantar token API kepada aplikasi anda. Kami akan membincangkan kaedah ini sambil menunjukkan penggunaannya menggunakan perpustakaan HTTP Guzzle. Anda boleh memilih mana-mana kaedah ini berdasarkan keperluan permohonan anda. 🎜🎜🎜Minta parameter🎜🎜Pengguna API aplikasi anda boleh memberikan token mereka sebagaiapi_token
nilai rentetan pertanyaan: 🎜 rrreee🎜🎜Minta muatan🎜🎜Pengguna API aplikasi boleh memasukkan token API mereka dalam parameter borang permintaan dalam bentuk Tokenapi_token
: 🎜 rrreee🎜🎜Token Pembawa 🎜🎜Pengguna API aplikasi boleh memberikan token API mereka dalam pengepalaKebenaran Kad permintaan sebagai Pembawa token: 🎜rrreee🎜Artikel ini pertama kali diterbitkan di laman web 🎜LearnKu.com🎜. 🎜🎜 Laman web PHP Cina