首页 php框架 Laravel Laravel开发:如何使用Laravel Passport和JWT实现API身份验证?

Laravel开发:如何使用Laravel Passport和JWT实现API身份验证?

Jun 13, 2023 pm 11:41 PM
laravel jwt passport

Laravel开发:如何使用Laravel Passport和JWT实现API身份验证?

API(Application Programming Interface)身份验证,是在当今互联网应用中普遍存在的需求。Laravel作为一款流行的PHP框架,提供了Laravel Passport和JWT(JSON Web Tokens)两种工具,可以帮助我们实现API身份验证。

本文将介绍如何使用Laravel Passport和JWT实现API身份验证。在接下来的内容中,我们将了解这两种工具的基本概念,以及如何在Laravel应用中配置和使用它们。

什么是Laravel Passport?

Laravel Passport是一个专门为Laravel框架开发的OAuth2服务器,可以帮助我们快速安全地构建API身份验证系统。Passport提供了一组API来执行认证流程,并且已经内部实现了一系列OAuth2协议规定的认证方式。

其中,OAuth2是一种使用代理授权方式的标准协议。代理授权是一个为代表用户获取访问资源的权限的授权机制。OAuth2协议通过向第三方应用颁发“访问令牌”,来代表用户访问受保护的资源。所以,Passport实际上是在Laravel应用中扮演着OAuth2认证服务器的角色。

什么是JWT?

JWT(JSON Web Tokens)是一种用于分布式网络环境中的身份验证和授权的开放标准(RFC 7519)。JWT通常被用来在客户端和服务端之间传递被认证的用户身份信息和声明。JWT由三部分组成:头部、载荷和签名。

通常,头部包含了JWT的类型和使用的加密算法,载荷包含了用户身份信息和声明,签名用于验证JWT的真实性。使用JWT进行身份验证时,服务端通过解密JWT中的信息来判断用户身份,从而实现API身份验证。

配置Laravel Passport和JWT

在使用Laravel Passport和JWT进行API身份验证前,我们需要先在Laravel应用中进行配置。下面是具体配置步骤:

步骤一:安装Laravel Passport和tymon/jwt-auth

在命令行工具中使用composer安装Laravel Passport和tymon/jwt-auth:

composer require laravel/passport
composer require tymon/jwt-auth
登录后复制

步骤二:配置Laravel Passport

在config/app.php文件中,添加以下服务提供者:

'providers' => [
    ...
    LaravelPassportPassportServiceProvider::class,
],
登录后复制

然后,运行以下命令来创建Passport的数据表:

php artisan migrate
登录后复制

对于Passport的默认认证方式“Password Grant”,我们在User模型中增加“PassportHasApiTokens”(Passport默认的用户认证Trait)。打开User.php文件,增加以下内容:

use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    ...
}
登录后复制

步骤三:配置JWT

首先,在config/app.php文件中,添加JWTServiceProvider:

'providers' => [
    ...
    TymonJWTAuthProvidersLaravelServiceProvider::class,
],
登录后复制

然后,运行以下命令来生成JWT所需的秘钥:

php artisan jwt:secret
登录后复制

在config/auth.php文件中,增加jwt守卫配置(将jwt作为守卫guard的选项),并将默认的认证驱动器driver设置为“jwt”:

'guards' => [
    ...
    'jwt' => [
        'driver' => 'jwt',
        'provider' => 'users'
    ],
],
...
'defaults' => [
    'guard' => 'jwt',
    ...
],
登录后复制

在config/auth.php文件中,增加JWT的用户提供程序users配置(指示使用Eloquent模型):

'providers' => [
    ...
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class
    ]
],
登录后复制

使用Laravel Passport和JWT进行API身份验证

准备工作完成后,我们就可以愉快地使用Laravel Passport和JWT实现API身份验证了。下面是具体操作流程:

步骤一:注册API路由

首先,在routes/api.php文件中注册API路由。例如,我们定义一个用于获取用户信息的GET路由:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
登录后复制

这里使用了Laravel的中间件auth:api,它将确保已认证用户的请求能够通过。通过路由中间件,我们在路由中添加了身份验证的这个步骤。

步骤二:创建访问令牌

用户需要通过访问令牌来访问API。我们需要使用密码授权访问令牌,具体实现步骤如下:

需要先定义一个路由,接收用户提供的用户名和密码:

Route::post('/login', function (Request $request) {
    $http = new GuzzleHttpClient;

    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'username' => $request->username,
            'password' => $request->password,
            'scope' => '',
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});
登录后复制

在上述代码中,我们使用了GuzzleHttp客户端来发送POST请求,获取访问令牌。其中,grant_type必须是“password”,client_id和client_secret分别对应Laravel Passport中应用的ID和Secret。请求成功后,将返回一个JSON响应,其中包含用户访问API的访问令牌access_token。

步骤三:发起API请求

我们可以使用获取到的令牌access_token,向API发送请求,验证用户身份,并获取受保护的资源。在向API发起请求时,必须在header中增加Authorization键值对,其值为“Bearer access_token”。例如:

$accessToken = 'your-access-token';
$response = $http->withHeaders([
    'Authorization' => 'Bearer ' . $accessToken
])->get('http://your-app.com/api/user');
登录后复制

如果请求成功,API将返回用户信息。

结论

在Laravel应用中,Laravel Passport提供了强大的OAuth2身份验证协议和API认证功能,而JWT是一种安全便捷的身份验证方式。在实际开发中,我们可以结合使用Laravel Passport和JWT,提高API的安全性和可靠性,保护用户数据不被恶意攻击者所窃取或篡改。

以上是Laravel开发:如何使用Laravel Passport和JWT实现API身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Laravel - Artisan 命令 Laravel - Artisan 命令 Aug 27, 2024 am 10:51 AM

Laravel - Artisan 命令 - Laravel 5.7 提供了处理和测试新命令的新方法。它包括测试 artisan 命令的新功能,下面提到了演示?

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

Laravel - Artisan 控制台 Laravel - Artisan 控制台 Aug 27, 2024 am 10:51 AM

Laravel - Artisan Console - Laravel 框架提供了三种主要的命令行交互工具,即:Artisan、Ticker 和 REPL。本章详细介绍了 Artisan。

Laravel - 分页自定义 Laravel - 分页自定义 Aug 27, 2024 am 10:51 AM

Laravel - 分页自定义 - Laravel 包含分页功能,可帮助用户或开发人员包含分页功能。 Laravel 分页器与查询构建器和 Eloquent ORM 集成。自动分页方法

在Laravel中如何获取邮件发送失败时的退信代码? 在Laravel中如何获取邮件发送失败时的退信代码? Apr 01, 2025 pm 02:45 PM

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Mar 31, 2025 pm 11:24 PM

Laravel计划任务运行无响应排查在使用Laravel的计划任务调度时,不少开发者会遇到这样的问题:schedule:run...

在 Laravel 中,如何处理邮件发送验证码失败的情况? 在 Laravel 中,如何处理邮件发送验证码失败的情况? Mar 31, 2025 pm 11:48 PM

Laravel邮件发送验证码失败时的处理方法在使用Laravel...

在dcat admin中如何实现点击添加数据的自定义表格功能? 在dcat admin中如何实现点击添加数据的自定义表格功能? Apr 01, 2025 am 07:09 AM

在dcatadmin(laravel-admin)中如何实现自定义点击添加数据的表格功能在使用dcat...

See all articles