laravel passport是laravel框架下的一款完整的oauth2服务端实现, 允许你通过api对用户身份进行认证和授权,使得api服务可以在无需暴露用户凭据的情况下进行访问,这大大降低了客户端开发的难度,提高了应用程序的安全性。
laravel passport背后的oauth2协议是业界标准,所以你可以使用相同的工具和流程,轻松地在其他语言和框架中集成oauth2认证和授权。下面,本文将详细介绍laravel passport的流程、配置和使用。
安装passport
在使用laravel passport之前,需要先安装它。我们可以使用composer命令来安装passport,命令如下:
composer require laravel/passport
启用passport
laravel passport安装完毕后,需要将其服务提供程序添加到config/app.php文件中的providers数组中,打开该文件,找到providers数组并添加laravel passport的服务提供程序,如下所示:
'providers' => [ // other service providers... laravel\passport\passportserviceprovider::class,],
创建数据库表
在使用laravel passport之前,还需要新建passport所需的数据库表,可以使用以下artisan命令来生成迁移文件:
php artisan migrate
执行以上命令后,laravel passport将在你的数据库中创建几个新的表来保存oauth2客户端、access token和refresh token等数据。
发布配置文件
执行以下artisan命令,将passport的配置文件发布到laravel项目的config目录下:
php artisan vendor:publish --tag=passport-config
创建密钥
到此,我们已经做好了使用laravel passport所需的前置条件。接下来,我们需要使用以下artisan命令来生成加密密钥:
php artisan passport:keys
以上命令将生成encryption keys,用于签署cookie和access token等数据。
配置passport
完成上述步骤后,我们接下来需要配置passport,以便使其运行。在config/auth.php配置文件中,将api驱动程序的driver更改为passport,并设置guards和providers,如下所示:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ],],
在同一个文件中配置providers,如下所示:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => app\models\user::class, ],],
一旦配置文件完成, api认证便已经就绪。
创建route
接下来,我们需要在app/http路由文件中创建api路由,如下所示:
route::middleware('auth:api')->get('/user', function (request $request) { return $request->user();});
在以上路由示例中,定义了auth:api中间件,用于验证请求是否来自已认证用户,若非已认证用户,则在验证失败时返回401状态码。
创建client
现在,我们已经完成了应用程序配置和api路由的设置,接下来需要创建api客户端。在laravel passport中,提供了artisan命令passport:client,用于创建新的oauth2客户端。执行如下所示的命令:
php artisan passport:client --client
在执行命令后,我们需要输入客户端名称和授权重定向uri,如下所示:
php artisan passport:client --clientwhich user id should the client be assigned to? [0]: > 1what should we name the client? > testwhere should we redirect the request after authorization? > http://example.com/callback
以上命令将创建一个新的oauth2客户端,用于向此应用程序的api发送请求。我们将得到一个客户端id和客户端密钥,用于后面的api请求中。
获取授权
客户端已经创建完成,并获得了授权重定向uri,现在我们需要向该uri发送一个请求,用以获取授权。之后,passport将会为客户端生成访问令牌,并返回给该客户端。使用如下所示的url,替换其中的client id和重定向uri:
http://your-app.com/oauth/authorize?client_id={client-id}&redirect_uri={redirect-uri} &response_type=code&scope=
在输入url后,如下所示的oauth2授权屏幕将会显示:
在点击'authorize'按钮后,将会发生授权并重定向到重定向uri。
获取访问令牌
现在,我们已经获得了授权,并且客户端已经被授予访问api的权限。我们需要使用oauth2授权码,与客户端密钥换取访问令牌,我们可以使用如下所示的curl命令,从api授权服务器获得访问令牌:
$ curl -x post -h accept: application/json -f client_id={client-id} -f client_secret={client-secret} -f grant_type=authorization_code -f code={code} -f redirect_uri={redirect-uri} http://your-app.com/oauth/token
执行以上命令后,将得到如下所示的json对象,其中包含access_token和refresh_token等信息:
{ token_type: bearer, expires_in: 86400, access_token: {access-token}, refresh_token: {refresh-token},}
使用访问令牌进行api请求
现在,我们已经获得了访问令牌,我们可以使用访问令牌与api进行请求。我们需要在api请求头部中增加authorization头,并设置bearer鉴权方案,将访问令牌作为令牌内容即可,如下所示:
$client = new \guzzlehttp\client();$response = $client->request('get', 'http://your-app.com/api/user', [ 'headers' => [ 'authorization' => 'bearer '.$accesstoken, 'accept' => 'application/json', ],]);
在以上代码中,我们将访问令牌以bearer token 的格式提交到api服务端进行验证,成功后将得到api的响应结果。
总结
在本文中,我们讲述了laravel passport的流程、配置和使用。使用laravel passport,我们可以快速地为api应用程序添加安全的认证和授权,同时支持oauth2协议,与其他编程语言和框架实现oauth2授权的应用程序进行互操作,这使得开发者能够快速地构建安全性高、易于使用的api应用程序。
以上就是详细介绍laravel passport的流程、配置和使用的详细内容。