在Debian上使用Laravel实现API认证,通常会采用Passport或Sanctum这两个官方推荐的包。以下是使用这两个包进行API认证的步骤:
安装Laravel Passport
在你的Laravel项目中,通过Composer安装Passport:
composer require laravel/passport
运行迁移
安装Passport后,需要运行迁移来创建必要的数据库表:
php artisan migrate
安装Passport
在config/app.php
文件中注册Passport服务提供者:
'providers' => [
// ...
Laravel\Passport\PassportServiceProvider::class,
],
并发布Passport的配置文件和密钥:
php artisan vendor:publish --provider="Laravel\Passport\PassportServiceProvider"
配置Passport
在AuthServiceProvider
中调用Passport::routes
方法,并设置访问令牌的有效期:
use Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
使用Passport进行认证
在你的控制器中,可以使用auth:api
中间件来保护路由:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
客户端可以通过发送POST请求到/oauth/token
来获取访问令牌:
POST /oauth/token HTTP/1.1
Host: your-app.com
Content-Type: application/x-www-form-urlencoded
grant_type=password&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&username=YOUR_USERNAME&password=YOUR_PASSWORD&scope=
安装Laravel Sanctum
通过Composer安装Sanctum:
composer require laravel/sanctum
运行迁移
运行迁移来创建必要的数据库表:
php artisan migrate
配置Sanctum
在config/app.php
文件中注册Sanctum服务提供者:
'providers' => [
// ...
Laravel\Sanctum\SanctumServiceProvider::class,
],
并发布Sanctum的配置文件:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
配置CORS
如果你的API将被前端应用调用,确保在config/cors.php
中配置了适当的CORS策略。
使用Sanctum进行认证
在你的控制器中,可以使用auth:api
中间件来保护路由:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
客户端可以通过发送POST请求到/sanctum/csrf-token
来获取CSRF令牌,然后在请求头中包含这个令牌:
POST /sanctum/csrf-token HTTP/1.1
Host: your-app.com
X-CSRF-TOKEN: your-csrf-token
接着,客户端可以发送带有授权头的请求来获取访问令牌:
POST /api/token HTTP/1.1
Host: your-app.com
Accept: application/json
Authorization: Basic base64_encode(client_id:client_secret)
username=YOUR_USERNAME&password=YOUR_PASSWORD&scope=
或者,如果使用的是Cookie认证:
POST /login HTTP/1.1
Host: your-app.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
email=YOUR_EMAIL&password=YOUR_PASSWORD
然后,客户端可以在后续请求中使用Cookie来进行认证。
选择Passport还是Sanctum取决于你的具体需求。Passport提供了更完整的OAuth2服务器实现,而Sanctum则更轻量级,适合简单的API认证场景。