debian

Laravel在Debian上如何实现API认证

小樊
44
2025-08-18 05:50:22
栏目: 智能运维

在Debian上使用Laravel实现API认证,通常会采用Passport或Sanctum这两个官方推荐的包。以下是使用这两个包进行API认证的步骤:

使用Laravel Passport

  1. 安装Laravel Passport

    在你的Laravel项目中,通过Composer安装Passport:

    composer require laravel/passport
    
  2. 运行迁移

    安装Passport后,需要运行迁移来创建必要的数据库表:

    php artisan migrate
    
  3. 安装Passport

    config/app.php文件中注册Passport服务提供者:

    'providers' => [
        // ...
        Laravel\Passport\PassportServiceProvider::class,
    ],
    

    并发布Passport的配置文件和密钥:

    php artisan vendor:publish --provider="Laravel\Passport\PassportServiceProvider"
    
  4. 配置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));
    }
    
  5. 使用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

  1. 安装Laravel Sanctum

    通过Composer安装Sanctum:

    composer require laravel/sanctum
    
  2. 运行迁移

    运行迁移来创建必要的数据库表:

    php artisan migrate
    
  3. 配置Sanctum

    config/app.php文件中注册Sanctum服务提供者:

    'providers' => [
        // ...
        Laravel\Sanctum\SanctumServiceProvider::class,
    ],
    

    并发布Sanctum的配置文件:

    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
    
  4. 配置CORS

    如果你的API将被前端应用调用,确保在config/cors.php中配置了适当的CORS策略。

  5. 使用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认证场景。

0
看了该问题的人还看了