Authentification du passeport OAuth
- Migration personnalisée
- Démarrez rapidement sur le front-end
- Déployer Passport
- Configuration
- Validité du jeton
- Remplacement modèle par défaut
- Émettre un jeton d'accès
- API JSON
- GET /oauth/clients
- Demande de jeton
- Redirection lors de l'autorisation
- Demande d'approbation
- Convertir le code d'autorisation pour accéder au jeton
- Actualiser le jeton
- Jeton d'autorisation de mot de passe
- Créer un client d'autorisation par mot de passe
- Demander un jeton
- Demander toutes les étendues
- Champ de nom d'utilisateur personnalisé
- Jeton d'autorisation implicite
- Jeton d'autorisation des informations d'identification du client
- Obtenir un jeton "Jeton d'accès personnel"
- OBTENIR /oauth/accès personnel -tokens
- Protection des itinéraires
- Portée du jeton
- Définir la portée
- Portée par défaut
- Attribuer une portée au jeton "Demander un code d'autorisation" Vérifiez la portée sur l'instance de jeton Accédez à l'API à l'aide de JavaScript
- Laravel Passport
- Durée de vie du jeton
- remplace le modèle par défaut
- Jeton de demande
- Jeton d'actualisation
- Jeton d'autorisation de mot de passe
Créer un client d'autorisation de mot de passe - Jeton d'autorisation simplifié
- Attribuer une portée au jeton
- Vérifier la portée
Introduction
Dans Laravel, il est très simple d'implémenter la connexion et l'autorisation basées sur des formulaires traditionnels, mais comment répondre aux exigences d'autorisation dans les scénarios API ? Dans les scénarios d'API, l'autorisation des utilisateurs est généralement implémentée via des jetons au lieu de maintenir l'état de session entre les requêtes. L'utilisation de Passport dans votre projet Laravel facilite la mise en œuvre de l'authentification par autorisation API. Passport peut fournir une implémentation complète du serveur OAuth2 pour votre application en quelques minutes. Passport est construit sur le serveur League OAuth2 maintenu par Andy Millington et Simon Hamp.
{note} Ce document suppose que vous connaissez déjà OAuth2. Si vous ne connaissez pas OAuth2, veuillez vous familiariser avec les termes courants et les fonctionnalités d'OAuth2 avant de lire.
Installation
Avant de commencer, installez Passport via le gestionnaire de packages Composer :
composer require laravel/passport
Le fournisseur de services Passport utilise le framework pour enregistrer son propre répertoire de migration de base de données, donc après avoir enregistré le fournisseur, vous devez Exécutez la commande de migration de Passport pour créer automatiquement la table de données qui stocke les clients et les jetons :
php artisan migrate
Ensuite, exécutez la commande
passport:install
pour créer les clés de chiffrement nécessaires pour générer des jetons d'accès sécurisé, en même temps , cette commande créera également un client « Accès personnel » et un client « Autorisation de mot de passe » pour générer des jetons d'accès :passport:install
命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:php artisan passport:install
上面命令执行后,请将
LaravelPassportHasApiTokens
Trait 添加到AppUser
模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use HasApiTokens, Notifiable; }
接下来,在
AuthServiceProvider
的boot
方法中调用Passport::routes
函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:<?php namespace App\Providers; use Laravel\Passport\Passport; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider{ /** * 应用程序的策略映射。 * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * 注册任何认证/授权服务。 * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }
最后,将配置文件
config/auth.php
中授权看守器guards
的api
的driver
选项改为passport
。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的TokenGuard
来处理:'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
自定义迁移
如果你不打算使用 Passport 的默认迁移,你应该在
AppServiceProvider
的register
方法中调用Passport::ignoreMigrations
方法。 你可以用这个命令php artisan vendor:publish --tag=passport-migrations
php artisan vendor:publish --tag=passport-components
Après avoir exécuté la commande ci-dessus, veuillez ajouter le traitLaravelPassportHasApiTokens
dans leModèle AppUser
, ce trait fournira à votre modèle quelques fonctions auxiliaires pour vérifier le jeton de l'utilisateur authentifié et la portée d'utilisation :Vue.component( 'passport-clients', require('./components/passport/Clients.vue').default); Vue.component( 'passport-authorized-clients', require('./components/passport/AuthorizedClients.vue').default ); Vue.component( 'passport-personal-access-tokens', require('./components/passport/PersonalAccessTokens.vue').default );
Ensuite, dansAuthServiceProvider Le
Passport::routes
La fonction est appelée dans la méthodeboot
du code>. Cette fonction enregistre les routes nécessaires pour émettre des jetons d'accès et révoquer les jetons d'accès, les jetons d'accès client et personnels :<passport-clients></passport-clients> <passport-authorized-clients></passport-authorized-clients>< passport-personal-access-tokens></passport-personal-access-tokens>
Enfin, ajoutez le garde d'autorisation dans le fichier de configurationconfig/auth.php
LeL'option driver
de l'api
deguards
est remplacée parpassport
. Ce réglage amènera votre application à utiliserTokenGuard
de Passport lors de la validation des requêtes API entrantes :php artisan passport:keys
Migration personnalisée
Si vous ne prévoyez pas d'utiliser la migration par défaut de Passport, vous devez appeler🎜Par défaut, Passport utilise le champ "user_id" pour identifier l'utilisateur. Si vous souhaitez utiliser un champ différent pour identifier l'utilisateur (par exemple : uuid), vous pouvez modifier le fichier de migration Passport par défaut. 🎜🎜🎜🎜🎜🎜🎜Passport:: dans la méthode
. Vous pouvez utiliser cette commanderegister
de la méthodeAppServiceProvider
ignoreMigrationsphp artisan seller:publish --tag=passport-migrations
pour exporter les migrations par défaut.Démarrez rapidement sur le front-end
{note} Pour utiliser le composant Vue de Passport, vous devez utiliser le framework JavaScript Vue. Ces composants utilisent également le framework CSS Bootstrap. Cependant, si vous ne prévoyez pas d'utiliser ces outils, ces composants sont également utiles pour écrire vos propres composants frontaux.
Passport fournit une série d'API JSON que vous pouvez utiliser pour permettre à vos utilisateurs de créer des jetons d'accès client et personnels. Cependant, l’écriture du code frontal qui interagit avec ces API peut prendre beaucoup de temps. Par conséquent, Passport comprend également des composants Vue précompilés que vous pouvez utiliser directement ou comme référence pour votre propre interface.
Pour utiliser le composant Vue de Passport, utilisez la commande Artisan
vendor:publish
:vendor:publish
Artisan 命令:/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::loadKeysFrom('/secret-keys/oauth'); }
被发布的组件将会被放到
resources/js/components
目录下。当组件被发布后,你应该在你的resources/js/app.js
文件中注册它们:/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::tokensExpireIn(now()->addDays(15)); Passport::refreshTokensExpireIn(now()->addDays(30)); }
{note} 在 Laravel v5.7.19 之前,在注册组件时添加 “.default” 会导致控制台错误。有关此更改的解释,请参阅 Laravel Mix v4.0.0 发布说明.
在注册了组件后,请确保运行
npm run dev
来重新编译你的资源。 当你重编译你的资源后,你可以将组件放到你应用的模板中以开始创建客户端和个人访问令牌:use App\Models\Passport\Client; use App\Models\Passport\AuthCode; use App\Models\Passport\TokenModel; use App\Models\Passport\PersonalAccessClient; /** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::useClientModel(Client::class); Passport::useTokenModel(TokenModel::class); Passport::useAuthCodeModel(AuthCode::class); Passport::usePersonalAccessClientModel(PersonalAccessClient::class); }
部署 Passport
第一次在你的生产环境部署 Passport 时,你大概需要运行
passport:keys
命令。这个命令生成 Passport 生成访问令牌所需的密钥。生成的密钥一般情况下不应放在版本控制中:php artisan passport:client
可以使用
Passport::loadKeysFrom
方法来自定义 Passport 密钥的加载路径:http://example.com/callback,http://examplefoo.com/callback
配置
令牌的有效期
默认情况下,Passport 发放的访问令牌是有一年有效期的。但是如果你想自定义访问令牌的有效期,可以使用
tokensExpireIn
和refreshTokensExpireIn
方法。上述两个方法同样需要在AuthServiceProvider
的boot
方法中调用:axios.get('/oauth/clients') .then(response => { console.log(response.data); });
覆盖默认模型
可以自由扩展 Passport 使用的模型,通过
Passport
const data = { name: 'Client Name', redirect: 'http://example.com/callback'}; axios.post('/oauth/clients', data) .then(response => { console.log(response.data); }) .catch (response => { // 在response里列出错误详情... });
Le composant publié sera placé dans le répertoireresources/js/components
. Lorsque les composants sont publiés, vous devez les enregistrer dans votre fichierresources/js/app.js
:const data = { name: 'New Client Name', redirect: 'http://example.com/callback'}; axios.put('/oauth/clients/' + clientId, data) .then(response => { console.log(response.data); }) .catch (response => { // 在response里列出错误详情... });
{note} Avant Laravel v5.7.19, lors de l'enregistrement des composants, ajoutez " .default" provoquera une erreur de console. Pour une explication de ce changement, consultez les Notes de version de Laravel Mix v4.0.0 .🎜S'inscrire Après avoir installé le composant, assurez-vous d'exécuternpm run dev
pour recompiler vos ressources. Après avoir recompilé vos ressources, vous pouvez placer le composant dans le modèle de votre application pour commencer à créer des jetons d'accès client et personnels : 🎜axios.delete('/oauth/clients/' + clientId) .then(response => { // });
🎜🎜🎜🎜🎜Déploiement de Passport🎜🎜La première fois que vous déployez Passport dans votre environnement de production, vous devrez probablement exécuter la commandepassport:keys
. Cette commande génère les clés dont Passport a besoin pour générer des jetons d'accès. Les clés générées ne doivent généralement pas être placées dans le contrôle de version : 🎜Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'redirect_uri' => 'http://example.com/callback', 'response_type' => 'code', 'scope' => '', ]); return redirect('http://your-app.com/oauth/authorize?'.$query); });
🎜Vous pouvez utiliser la méthodePassport::loadKeysFrom
pour personnaliser le chemin de chargement des clés Passport : 🎜php artisan vendor:publish --tag=passport-views
🎜 🎜🎜🎜Configuration
🎜🎜🎜🎜🎜Durée de validité du jeton🎜🎜Par défaut, le jeton d'accès émis par Passport est valable un an. Mais si vous souhaitez personnaliser la période de validité du jeton d'accès, vous pouvez utiliser les méthodestokensExpireIn
etrefreshTokensExpireIn
. Les deux méthodes ci-dessus doivent également être appelées dans la méthodeboot
deAuthServiceProvider
: 🎜Route::get('/callback', function (Request $request) { $http = new GuzzleHttp\Client; $response = $http->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'authorization_code', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'redirect_uri' => 'http://example.com/callback', 'code' => $request->code, ], ]); return json_decode((string) $response->getBody(), true); });
🎜🎜🎜🎜🎜Remplacer le modèle par défaut🎜🎜Vous pouvez librement étendre le modèle utilisé par Passport et remplacer le modèle par défaut via le modèle personnalisé de classePassport
: 🎜$http = new GuzzleHttp\Client; $response = $http->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'refresh_token', 'refresh_token' => 'the-refresh-token', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'scope' => '', ],]); return json_decode((string) $response->getBody(), true);
🎜🎜🎜🎜🎜🎜Émettre un jeton d'accès
Les développeurs qui connaissent OAuth2 doivent savoir que la partie essentielle d'OAuth2 est le code d'autorisation. Lorsque vous utilisez un code d'autorisation, l'application client redirigera l'utilisateur vers votre serveur et approuvera ou refusera la demande de jeton d'accès du client.
Gérer les clients
Tout d'abord, pour créer une application qui doit interagir avec l'API de l'application, les développeurs devront enregistrer leur application en créant un "client". Généralement, cela implique de fournir le nom de l'application de l'utilisateur et une URL vers laquelle l'application peut rediriger une fois que l'utilisateur a approuvé sa demande d'autorisation.
La commande
passport:client
passport:client
命令创建客户端最简单的方式是使用 Artisan 命令
passport:client
,你可以使用此命令创建自己的客户端,用于测试你的 OAuth2 的功能。在你执行client
命令时,Passport 会提示你输入有关客户端的信息,最终会给你提供客户端的 ID 和 密钥:php artisan passport:client --password
Redirect URLs
当有多个重定向 URL 白名单时,可以在
passport:client
命令提示输入 URL 时,使用逗号分隔来指定:$http = new GuzzleHttp\Client; $response = $http->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'password', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'username' => 'taylor@laravel.com', 'password' => 'my-password', 'scope' => '', ],]); return json_decode((string) $response->getBody(), true);
{note} 任何包含逗号的 URL 都必须进行编码。
JSON API
考虑到你的用户无法使用 client 命令,Passport 为此提供了可用于创建「客户端」的 JSON API。这样你就不用再花时间编写控制器来创建、更新和删除客户端。
然而,你仍旧需要基于 Passport 的 JSON API 开发一套前端界面,为你的用户提供管理客户端的面板。下面我们会列出所有用于管理客户端的 API,为了方便起见,我们使用 Axios 来演示对端口发出 HTTP 请求。
这个 JSON API 由
web
和auth
两个中间件保护,所以只能从应用程序中调用,不能从外部调用。{tip} 如果你不想自己实现整个客户端管理的前端界面,可以使用 前端快速上手 在几分钟内组建一套功能齐全的前端界面。
La façon la plus simple de créer un client est d'utiliser la commande ArtisanGET /oauth/clients
passport:client
, vous pouvez utiliser cette commande pour créer votre propre client, utilisé pour tester votre fonctionnalité OAuth2. Lorsque vous exécutez la commandeclient
, Passport vous demandera des informations sur le client, vous donnant éventuellement l'identifiant et le secret du client :$response = $http->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'password', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'username' => 'taylor@laravel.com', 'password' => 'my-password', 'scope' => '*', ], ]);
URL de redirection Lorsqu'il y a plusieurs listes blanches d'URL de redirection, vous pouvez les spécifier en utilisant une séparation par virgules lorsque la commandepassport:client
demande l'URL :🎜<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use HasApiTokens, Notifiable; /** * 通过用户名找到对应的用户信息 * * @param string $username * @return \App\User */ public function findForPassport($username) { return $this->where('username', $username)->first(); } }
🎜{note} Toute URL contenant une virgule sera codée. 🎜
🎜🎜API JSON🎜🎜Considérant que vos utilisateurs ne peuvent pas utiliser la commande client, Passport fournit du JSON qui peut être utilisé pour créer une API "clients". De cette façon, vous n'avez plus besoin de passer du temps à écrire des contrôleurs pour créer, mettre à jour et supprimer des clients. 🎜🎜Cependant, vous devez encore développer une interface front-end basée sur l'API JSON de Passport pour fournir à vos utilisateurs un panneau de gestion client. Ci-dessous, nous listerons toutes les API utilisées pour gérer les clients. Pour plus de commodité, nous utilisons Axios🎜 pour démontrer l'envoi de requêtes HTTP au port. 🎜🎜Cette API JSON est protégée par deux middlewares :web
etauth
, elle ne peut donc être appelée que depuis l'application et ne peut pas être appelée de l'extérieur. 🎜🎜{tip} Si vous ne souhaitez pas implémenter vous-même l'intégralité de l'interface frontale de gestion des clients, vous pouvez utiliser pour démarrer rapidement🎜 afin de créer une interface entièrement fonctionnelle interface frontale en quelques minutes. 🎜
🎜🎜GET /oauth/clients
🎜🎜Cette route renverra tous les clients de l'utilisateur authentifié. L'utilisation principale est de lister les clients de tous les utilisateurs afin qu'ils puissent les modifier ou les supprimer : 🎜/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::enableImplicitGrant(); }
🎜🎜POST /oauth/clients
Cette route est utilisée pour créer de nouveaux clients. Il nécessite deux paramètres : le nom du client
name
et l'URL de rappel post-autorisationredirect
. Après avoir approuvé ou refusé la demande d'autorisation, l'utilisateur est redirigé vers le lien fourni par le paramètreredirect
.POST /oauth/clients
此路由用于创建新客户端。它需要两个参数:客户端的名称
name
和授权后回调的 URLredirect
。在批准或拒绝授权请求后,用户会被重定向到redirect
参数提供的链接。当客户端创建后,会返回客户端的 ID 和密钥。客户端可以使用这两个值从你的授权服务请求访问令牌 (Access token) 。该路由会返回新的客户端实例:
Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'redirect_uri' => 'http://example.com/callback', 'response_type' => 'token', 'scope' => '', ]); return redirect('http://your-app.com/oauth/authorize?'.$query); });
PUT /oauth/clients/{client-id}
此路由用于更新客户端信息。它需要两个参数:客户端的名称
name
和授权后回调的 URLredirect
。在批准或拒绝授权请求后,用户会被重定向redirect
到这个链接。此路由会返回更新后的客户端实例:php artisan passport:client --client
DELETE /oauth/clients/{client-id}
此路由用于删除客户端 (client):
use Laravel\Passport\Http\Middleware\CheckClientCredentials; protected $routeMiddleware = [ 'client' => CheckClientCredentials::class, ];
请求令牌
授权时的重定向
客户端创建之后,开发者会使用此客户端的 ID 和密钥来请求授权代码,并从应用程序访问令牌。首先,接入应用的用户向你应用程序的
/oauth/authorize
路由发出重定向请求,示例如下:Route::get('/orders', function (Request $request) { ... })->middleware('client');
{tip} 注意,路由
/oauth/authorize
已经在Passport::routes
方法中定义。你不需要手动定义此路由。批准请求
接收到授权请求时,Passport 会自动向用户显示一个模版页面,允许用户批准或拒绝授权请求。如果用户批准请求,他们会被重定向回接入的应用程序指定的
redirect_uri
。redirect_uri
必须和客户端创建时指定的redirect
链接完全一致。如果你想自定义授权确认页面,可以使用 Artisan 命令
vendor:publish
发布 Passport 的视图。发布后的视图文件存放在resources/views/vendor/passport
Lorsque le client est créé, l'identifiant et la clé du client seront renvoyés. Le client peut utiliser ces deux valeurs pour demander un jeton d'accès à votre service d'autorisation. Cette route renverra une nouvelle instance client :
Route::get('/orders', function (Request $request) { ... })->middleware('client:check-status,your-scope');
PUT /oauth/clients/{client-id}
Cette route est utilisée pour mettre à jour les informations du client. Il nécessite deux paramètres : le nom du client
name
et l'URL de rappel post-autorisationredirect
. Après avoir approuvé ou refusé la demande d'autorisation, l'utilisateur sera redirigéredirect
vers ce lien. Cette route renvoie l'instance client mise à jour : 🎜$guzzle = new GuzzleHttp\Client; $response = $guzzle->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'client_credentials', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'scope' => 'your-scope', ],]); return json_decode((string) $response->getBody(), true)['access_token'];
🎜🎜DELETE /oauth/clients/{client-id}
h4>< p>Cette route est utilisée pour supprimer le client : 🎜php artisan passport:client --personal
🎜Jeton de demande
🎜🎜Redirection pendant l'autorisationAprès la création du client, le développeur utilisera l'ID et le secret de ce client sont utilisés pour demander des codes d'autorisation et des jetons d'accès à l'application. Tout d'abord, l'utilisateur accédant à l'application envoie une requête de redirection vers la route
/oauth/authorize
de votre application. L'exemple est le suivant : 🎜/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::personalAccessClientId('client-id'); }
{tip} Notez que la route.
/ oauth/authorize
a été défini dans la méthodePassport::routes
. Vous n'avez pas besoin de définir cet itinéraire manuellement. 🎜🎜🎜Demande d'approbationLors de la réception d'une demande d'autorisation, Passport affichera automatiquement une page modèle à l'utilisateur, permettant au l'utilisateur d'approuver ou de refuser la demande d'autorisation. Si l'utilisateur approuve la demande, il est redirigé vers le
redirect_uri
spécifié par l'application accédante. Leredirect_uri
doit être exactement le même que le lienredirect
spécifié lors de la création du client. 🎜Si vous souhaitez personnaliser la page de confirmation d'autorisation, vous pouvez utiliser la commande Artisan
vendor:publish
pour publier la vue Passeport. Les fichiers de vues publiés sont stockés dansresources/views/vendor/passport
: 🎜$user = App\User::find(1); // 创建没有作用域的访问令牌... $token = $user->createToken('Token Name')->accessToken; // 创建有作用域的访问令牌... $token = $user->createToken('My Token', ['place-orders'])->accessToken;
🎜🎜Convertir le code d'autorisation en jeton d'accès
Une fois que l'utilisateur a approuvé la demande d'autorisation, il sera redirigé vers l'application consultée. L'application accédante doit alors demander un jeton d'accès à votre application via une requête
POST
. La demande doit inclure le code d'autorisation émis par l'application lorsque l'utilisateur approuve la demande d'autorisation. Dans l'exemple suivant, nous utilisons la bibliothèque HTTP Guzzle pour implémenter cette requêtePOST
:POST
请求向你的应用程序申请访问令牌。请求应该包括当用户批准授权请求时由应用程序发出的授权码。在下面的例子中,我们使用 Guzzle HTTP 库来实现这次POST
请求:axios.get('/oauth/scopes') .then(response => { console.log(response.data); });
路由
/oauth/token
返回的 JSON 响应中会包含access_token
、refresh_token
和expires_in
属性。expires_in
属性包含访问令牌的有效期(单位:秒)。{tip} 像
/oauth/authorize
路由一样,/oauth/token
路由在Passport::routes
方法中定义了,你没必要手动去定义它。默认情况下,此路由使用 “ThrottleRequests” 中间件的设置进行限流。刷新令牌
如果你的应用程序发放了短期的访问令牌,用户将需要通过在发出访问令牌时提供给他们的刷新令牌来刷新其访问令牌。在下面的例子中,我们使用 Guzzle HTTP 库来刷新令牌:
axios.get('/oauth/personal-access-tokens') .then(response => { console.log(response.data); });
路由
/oauth/token
会返回一个 JSON 响应,其中包含access_token
、refresh_token
和expires_in
属性。expires_in
属性包含访问令牌的有效时间(单位:秒)。密码授权令牌
OAuth2 密码授权机制可以让你自己的客户端(如移动应用程序)使用邮箱地址或者用户名和密码获取访问令牌。如此一来你就可以安全地向自己的客户端发出访问令牌,而不需要遍历整个 OAuth2 授权代码重定向流程
创建密码授权客户端
在应用程序通过密码授权机制来发布令牌之前,在
passport:client
命令后加上--password
参数来创建密码授权的客户端。如果你已经运行了passport:install
const data = { name: 'Token Name', scopes: []}; axios.post('/oauth/personal-access-tokens', data) .then(response => { console.log(response.data.accessToken); }) .catch (response => { // 列出响应中错误... });
Route/oauth/token
La réponse JSON renvoyée contiendraaccess_token< Attributs /code>,
refresh_token
etexpires_in
. L'attributexpires_in
contient la date d'expiration du jeton d'accès en secondes.{tip} Comme la route
/oauth/authorize
, la route/oauth/token
est définie dans lePassport::routes
méthode , vous n’avez pas besoin de la définir manuellement. Par défaut, cette route utilise les paramètres du middleware « ThrottleRequests » pour la limitation.🎜Actualiser les jetons
🎜Si votre application A short- le jeton d'accès réel est émis et l'utilisateur devra actualiser son jeton d'accès via le jeton d'actualisation qui lui a été fourni lors de l'émission du jeton d'accès. Dans l'exemple suivant, nous utilisons la bibliothèque HTTP Guzzle pour actualiser le token : 🎜axios.delete('/oauth/personal-access-tokens/' + tokenId);
🎜La route/oauth/token
renverra une réponse JSON contenantaccess_token
,attributsfresh_token
etexpires_in
. L'attributexpires_in
contient le délai d'expiration du jeton d'accès en secondes. 🎜🎜🎜🎜🎜Jeton d'attribution de mot de passe
🎜Le mécanisme d'attribution de mot de passe OAuth2 permet votre propre le client (comme une application mobile) obtient un jeton d'accès à l'aide d'une adresse e-mail ou d'un nom d'utilisateur et d'un mot de passe. De cette façon, vous pouvez émettre en toute sécurité des jetons d'accès à vos propres clients sans avoir à passer par tout le processus de redirection du code d'autorisation OAuth2🎜🎜🎜🎜< div name="49cdea " data-unique="49cdea">🎜Créez un client d'autorisation par mot de passe
🎜Avant que l'application n'émet des jetons via le mécanisme d'autorisation par mot de passe, danspassport:client Ajoutez le
-- password
après la commande code> pour créer un client autorisé par mot de passe. Si vous avez déjà exécuté la commandepassport:install
, vous n'avez pas besoin de réexécuter cette commande : 🎜Route::get('/user', function () { // })->middleware('auth:api');
🎜🎜🎜🎜🎜🎜Demander un jeton
Une fois que vous avez créé un client avec un mot de passe, vous pouvez y accéder en effectuant une requête
POST
sur la route/oauth/token
en utilisant l'adresse e-mail de l'utilisateur. et un jeton de mot de passe. L'itinéraire a déjà été enregistré par la méthodePassport::routes
, il n'est donc pas nécessaire de le définir manuellement. Si la requête aboutit, vous recevrez unaccess_token
et unrefresh_token
dans la réponse JSON renvoyée par le serveur :/oauth/token
路由发出POST
请求来获取访问令牌。而该路由已经由Passport::routes
方法注册,因此不需要手动定义它。如果请求成功,会在服务端返回的 JSON 响应中收到一个access_token
和refresh_token
:$response = $client->request('GET', '/api/user', [ 'headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer '.$accessToken, ], ]);
{tip} 默认情况下,访问令牌是长期有效的。你可以根据需要 配置访问令牌的有效时间 。
请求所有作用域
使用密码授权机制时,可以通过请求 scope 参数
*
来授权应用程序支持的所有范围的令牌。如果你的请求中包含 scope 为*
的参数,令牌实例上的can
方法会始终返回true
。这种作用域的授权只能分配给使用password
授权时发出的令牌:use Laravel\Passport\Passport; Passport::tokensCan([ 'place-orders' => 'Place orders', 'check-status' => 'Check order status', ]);
自定义用户名字段
当使用密码授权时,Passport 默认使用
email
作为「用户名」。但是,你可以通过在模型上定义一个findForPassport
方法来自定义用户名字段:use Laravel\Passport\Passport;Passport::setDefaultScope([ 'check-status', 'place-orders', ]);
隐式授权令牌
隐式授权类似于授权码授权,但是它只将令牌返回给客户端而不交换授权码。这种授权最常用于无法安全存储客户端凭据的 JavaScript 或移动应用程序。通过调用
AuthServiceProvider
中的enableImplicitGrant
方法来启用这种授权:Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'redirect_uri' => 'http://example.com/callback', 'response_type' => 'code', 'scope' => 'place-orders check-status', ]); return redirect('http://your-app.com/oauth/authorize?'.$query);});
调用上面方法开启授权后,开发者可以使用他们的客户端 ID 从应用程序请求访问令牌。接入的应用程序应该向你的应用程序的
/oauth/authorize
路由发出重定向请求,如下所示:$token = $user->createToken('My Token', ['place-orders'])->accessToken;
{tip} 注意,
/oauth/authorize
路由已经在Passport::routes
'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class, 'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
{tip} Par défaut, le jeton d'accès Est efficace à long terme. Vous pouvez configurer la durée de validité du jeton d'accès selon vos besoins
.🎜Demande de toutes les étendues🎜🎜Lorsque vous utilisez le mécanisme d'autorisation par mot de passe, vous pouvez demander une étendue par les paramètres*
pour autoriser toutes les plages de tokens supportées par l'application. Si votre requête inclut des paramètres avec une portée*
, la méthodecan
sur l'instance de jeton retournera toujourstrue
. Les autorisations de cette portée ne peuvent être attribuées qu'aux jetons émis lors de l'utilisation de l'autorisationmot de passe
: 🎜Route::get('/orders', function () { // Access token has both "check-status" and "place-orders" scopes... })->middleware('scopes:check-status,place-orders');
🎜🎜🎜🎜🎜Champ de nom d'utilisateur personnalisé🎜🎜Lors de l'utilisation de l'autorisation par mot de passe, Passport utilisee-mail
comme "nom d'utilisateur" par défaut. Cependant, vous pouvez personnaliser le champ du nom d'utilisateur en définissant une méthodefindForPassport
sur le modèle : 🎜Route::get('/orders', function () { // 访问令牌具有 "check-status" 或 "place-orders" 作用域... })->middleware('scope:check-status,place-orders');
🎜🎜🎜🎜Jeton d'autorisation implicite
🎜L'autorisation implicite est similaire à l'autorisation par code d'autorisation, mais elle renvoie uniquement le jeton au client sans échanger le code d'autorisation. Cette autorisation est le plus souvent utilisée pour les applications JavaScript ou mobiles qui ne peuvent pas stocker les informations d'identification du client en toute sécurité. Activez cette autorisation en appelant la méthodeenableImplicitGrant
dansAuthServiceProvider
: 🎜use Illuminate\Http\Request; Route::get('/orders', function (Request $request) { if ($request->user()->tokenCan('place-orders')) { // } });
🎜Après avoir appelé la méthode ci-dessus pour activer l'autorisation, les développeurs peuvent utiliser leur ID client pour demander au jeton d'accès de l'application . L'application connectée doit effectuer une demande de redirection vers la route/oauth/authorize
de votre application, comme indiqué ci-dessous : 🎜Laravel\Passport\Passport::scopeIds();
🎜{tip} Remarque,
/oauth/ L'autorisation
L'itinéraire a déjà été défini dans la méthodePassport::routes
, il n'est donc pas nécessaire de définir à nouveau cet itinéraire manuellement. 🎜🎜🎜🎜🎜🎜🎜🎜Client Credential Grant Token
Client Credential Grant Token convient à l'authentification de machine à machine. Par exemple, vous pouvez utiliser cette autorisation pour effectuer des tâches de maintenance via l'API.
Avant l'autorisation des informations d'identification client, vous devez créer un client d'autorisation des informations d'identification client. Vous pouvez utiliser le paramètre
--client
de la commandepassport:client
pour créer :passport:client
命令的--client
参数来创建:Laravel\Passport\Passport::scopes();
接下来,要使用这种授权,你首先需要在
app/Http/Kernel.php
的$routeMiddleware
变量中添加新的中间件:Laravel\Passport\Passport::scopesFor(['place-orders', 'check-status']);
然后,在路由上追加这个中间件:
Laravel\Passport\Passport::hasScope('place-orders');
若要将对路由的访问限制在某个作用域内,可在将
client
中间件附加到路由时提供以逗号分隔的所需作用域列表:'web' => [ // 其他中间件... \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, ],
获取令牌
通过向
oauth/token
接口发出请求来获取令牌:axios.get('/api/user') .then(response => { console.log(response.data); });
个人访问令牌
有时候,用户要在不经过传统的授权码重定向流程的情况下向自己发出访问令牌。允许用户通过应用程序用户界面对自己发出令牌,有助于用户体验你的 API,或者也可以将其作为一种更简单的发布访问令牌的方式。
{note} 个人访问令牌是永久有效的,就算使用了
tokensExpireIn
和refreshTokensExpireIn
方法也不会修改它的生命周期。创建个人访问客户端
在你的应用程序发布个人访问令牌之前,你需要在
passport:client
命令后带上--personal
参数来创建对应的客户端。如果你已经运行了passport:install
命令,则无需再运行此命令:/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::cookie('custom_name'); }
如果你已经创建了个人访问客户端,你可以通过调用
AuthServiceProvider
中的personalAccessClientId
方法来启用:// In your application layout... <meta name="csrf-token" content="{{ csrf_token() }}"> // Laravel's JavaScript scaffolding... window.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest', };
管理个人访问令牌
创建个人访问客户端后,你可以使用
User
模型实例上的createToken
方法来为给定用户发布令牌。createToken
/** * 应用程序事件监听映射 * * @var array */ protected $listen = [ 'Laravel\Passport\Events\AccessTokenCreated' => [ 'App\Listeners\RevokeOldTokens', ], 'Laravel\Passport\Events\RefreshTokenCreated' => [ 'App\Listeners\PruneOldTokens', ], ];
. Ensuite, pour utiliser cette autorisation, vous devez d'abord ajouter un nouveau middleware dans la variable$routeMiddleware
deapp/Http/Kernel.php
:use App\User; use Laravel\Passport\Passport; public function testServerCreation(){ Passport::actingAs( factory(User::class)->create(), ['create-servers'] ); $response = $this->post('/api/create-server'); $response->assertStatus(201); }
Ensuite, ajoutez ce middleware à la route :rrreeePour limiter l'accès à la route à une certaine étendue, fournissez la liste des étendues requises séparées par des virgules : 🎜rrreee🎜Obtenez un token
🎜En faisant une demande à l'interfaceoauth/token
Pour obtenir des tokens :🎜rrreee🎜🎜🎜🎜🎜Jetons d'accès personnels🎜🎜Parfois, les utilisateurs souhaitent vous émettre un jeton d'accès sans passer par le processus traditionnel de redirection du code d'autorisation. Permettre aux utilisateurs de s'émettre des jetons via l'interface utilisateur de l'application peut aider les utilisateurs à découvrir votre API, ou cela peut être utilisé comme un moyen plus simple d'émettre des jetons d'accès. 🎜🎜{note} Les jetons d'accès personnels sont valides en permanence, et leur cycle de vie ne sera pas modifié même si les méthodes
🎜🎜🎜tokensExpireIn
etrefreshTokensExpireIn
sont utilisées. 🎜🎜Création d'un client d'accès personnel h3>🎜Avant que votre application n'émette un jeton d'accès personnel, vous devez créer le client correspondant avec le paramètre
--personal
après la commandepassport:client
. Si vous avez déjà exécuté la commandepassport:install
, vous n'avez pas besoin de réexécuter cette commande : 🎜rrreee🎜Si vous avez déjà créé un client d'accès personnel, vous pouvez le faire en appelant leAuthServiceProvider
La méthodepersonalAccessClientId
pour activer : 🎜rrreee🎜🎜🎜🎜Gérer les jetons d'accès personnels
🎜Après avoir créé un client d'accès personnel, vous pouvez utiliser la méthodecreateToken
sur l'instance de modèleUtilisateur
pour émettre un jeton pour un utilisateur donné. La méthodecreateToken
accepte le nom du token comme premier paramètre et un tableau 🎜scope🎜 optionnel comme deuxième paramètre : 🎜rrreee🎜🎜API JSON
Passport dispose également d'une API JSON pour gérer les jetons d'accès personnels. Vous pouvez l'associer à votre propre frontal pour fournir aux utilisateurs un tableau de bord pour gérer les jetons d'accès personnels. Nous décrivons ci-dessous toutes les interfaces API permettant de gérer les jetons d'accès personnels. Pour plus de commodité, nous utilisons Axios pour démontrer l'envoi de requêtes HTTP à l'interface API.
L'API JSON est protégée par les middlewares
web
etauth
; elle ne peut donc être appelée que depuis votre propre application. Il ne peut pas être appelé à partir de sources externes.web
和auth
中间件保护;因此,只能从您自己的应用程序中调用它。无法从外部源调用它。{tip} 如果你不想实现自己的个人访问令牌管理的前端界面,可以根据 前端快速上手 在几分钟内组建功能齐全的前端界面。
GET /oauth/scopes
此路由会返回应用程序中定义的所有 作用域。你可以使用此路由列出用户可能分配给个人访问令牌的范围:
rrreeeGET /oauth/personal-access-tokens
此路由返回认证用户创建的所有个人访问令牌。这主要用于列出所有用户的令牌,以便他们可以编辑或删除它们:
rrreeePOST /oauth/personal-access-tokens
此路由用于创建新的个人访问令牌。它需要两个数据:令牌的
rrreeename
和scpoe
:DELETE /oauth/personal-access-tokens/{token-id}
此路由可用于删除个人访问令牌:
rrreee路由保护
通过中间件
Passport 包含一个 验证保护机制 可以验证请求中传入的访问令牌。配置
rrreeeapi
的看守器使用passport
驱动程序后,只需要在需要有效访问令牌的任何路由上指定auth:api
中间件:传递访问令牌
当调用 Passport 保护下的路由时,接入的 API 应用需要将访问令牌作为
Bearer
令牌放在请求头Authorization
{tip} Si vous ne souhaitez pas implémenter votre propre interface frontale pour la gestion des jetons d'accès personnels, vous pouvez créer une interface frontale entièrement fonctionnelle en quelques minutes selon Démarrage rapide du front-end
GET /oauth/scopes
Cette route renverra tous les Portées🎜. Vous pouvez utiliser cette route pour répertorier les étendues auxquelles un utilisateur peut être attribué aux jetons d'accès personnels : 🎜rrreee🎜🎜GET /oauth/personal-access- tokens< /code>🎜🎜Cette route renvoie tous les jetons d'accès personnels créés par l'utilisateur authentifié. Ceci est principalement utilisé pour répertorier tous les jetons des utilisateurs afin qu'ils puissent les modifier ou les supprimer : 🎜rrreee
🎜🎜POST /oauth/personal-access-tokens< /code>🎜🎜Cette route est utilisée pour créer de nouveaux jetons d'accès personnels. Il nécessite deux éléments de données : le
name
et lescpoe
du jeton : 🎜rrreee🎜🎜DELETE /oauth/personal-access-tokens/{token-id}
🎜🎜Cette route peut être utilisée pour supprimer des jetons d'accès personnels : 🎜rrreee🎜🎜🎜🎜Protection des routes
🎜🎜🎜🎜 < h3>Via middleware🎜Passport inclut un mécanisme de protection par authentification qui permet de vérifier le jeton d'accès transmis dans la requête. Après avoir configuré l'observateur deapi
pour utiliser le pilotepassport
, il vous suffit de spécifier le middlewareauth:api
sur toute route nécessitant un identifiant valide. jeton d'accès : 🎜rrreee🎜🎜🎜🎜Passer le jeton d'accès
🎜 Lors de l'appel Lors du routage sous protection Passport, l'application API accédée doit placer le jeton d'accès en tant que jetonBearer
dans l'en-tête de la demandeAutorisation
. Par exemple, lorsque vous utilisez la bibliothèque HTTP Guzzle : 🎜rrreee🎜🎜🎜🎜🎜🎜Token Scope
Scope permet aux clients API de demander des autorisations spécifiques lors de la demande d'autorisation de compte. Par exemple, si vous créez une application de commerce électronique, toutes les applications API qui s'y connectent n'auront pas besoin de pouvoir passer des commandes. Vous pouvez autoriser les applications API connectées à accéder uniquement au statut d'expédition des commandes. En d’autres termes, la portée permet aux utilisateurs d’une application de limiter les actions que les applications tierces peuvent effectuer.
Définissez la portée
Vous pouvez utiliser la méthode
rrreeePassport::tokensCan
dans la méthodeboot
deAuthServiceProvider
pour définissez-le La portée de l'API. La méthodetokensCan
accepte un tableau contenant le nom de la portée et la description comme paramètres. La description de la portée sera affichée directement à l'utilisateur sur la page de confirmation d'autorisation. Vous pouvez la définir comme tout ce dont vous avez besoin :AuthServiceProvider
的boot
方法中使用Passport::tokensCan
方法来定义 API 的作用域。tokensCan
方法接受一个包含作用域名称和描述的数组作为参数。作用域描述将会在授权确认页中直接展示给用户,你可以将其定义为任何你需要的内容:默认作用域
如果客户端没有请求任何特定的范围,你可以在
rrreeeAuthServiceProvider
的boot
方法中使用Passport::setDefaultScope
方法来定义默认的作用域。给令牌分配作用域
请求授权码
使用授权码请求访问令牌时,接入的应用需为
rrreeescope
参数指定所需作用域。scope
参数包含多个作用域时,名称之间使用空格分割:分发个人访问令牌
使用
rrreeeUser
模型的createToken
方法发放个人访问令牌时,可以将所需作用域的数组作为第二个参数传给此方法:检查作用域
Passport 包含两个中间件,可用于验证传入的请求是否包含访问指定作用域的令牌。 使用之前,需要将下面的中间件添加到
rrreeeapp/Http/Kernel.php
文件的$routeMiddleware
属性中:检查所有作用域
路由可以使用
rrreeescopes
中间件来检查当前请求是否拥有指定的 所有 作用域:检查任意作用域
Portée par défaut🎜🎜Si le client ne demande aucune portée spécifique, vous pouvez utiliserdans la méthode
pour définir la portée par défaut. 🎜rrreee🎜🎜🎜boot
deAuthServiceProvider
Passport : méthode setDefaultScope🎜🎜Attribution de portées aux jetons🎜🎜Demander un code d'autorisation
🎜Lorsque vous utilisez le code d'autorisation pour demander un jeton d'accès, l'application connectée doit spécifier la portée requise pour le paramètrescope
. Lorsque le paramètrescope
contient plusieurs scopes, utilisez des espaces pour séparer les noms : 🎜rrreee🎜Distribuer les jetons d'accès personnels< /h4 >🎜Lorsque vous utilisez la méthode
createToken
du modèleUser
pour émettre un jeton d'accès personnel, vous pouvez transmettre le tableau de la portée requise comme deuxième paramètre à cette méthode : 🎜 rrreee🎜🎜🎜🎜🎜Vérification des étendues🎜🎜Passport contient deux middlewares qui peuvent être utilisés pour valider les demandes entrantes S'il faut inclure un jeton pour accéder à la portée spécifiée. Avant utilisation, vous devez ajouter le middleware suivant à l'attribut$routeMiddleware
du fichierapp/Http/Kernel.php
: 🎜rrreee🎜Vérifier toutes les étendues
🎜Les routes peuvent utiliser le middlewarescopes
pour vérifier si la requête actuelle a les 🎜toutes🎜 étendues spécifiées : 🎜rrreee🎜Vérifier n'importe quelle portée
🎜La route peut utiliser le middlewarescope
pour vérifier si la requête actuelle a la 🎜any spécifiée 🎜 Portée : 🎜rrreee🎜🎜Vérifiez la portée sur l'instance de jeton
Même si la requête contenant la vérification du jeton d'accès a été authentifiée par l'application, vous pouvez toujours utiliser le
rrreeetokenCan
Utilisateur actuellement autorisé. instance > Méthode pour vérifier si le jeton a la portée spécifiée :User
实例上的tokenCan
方法来验证令牌是否拥有指定的作用域:附加作用域方法
rrreeescopeIds
方法将返回所有已定义 ID / 名称的数组:
rrreeescopes
方法将返回一个 包含所有已定义作用域数组的LaravelPassportScope
实例:
rrreeescopesFor
方法将返回与给定 ID / 名称匹配的LaravelPassportScope
实例数组:你可以使用
rrreeehasScope
方法确定是否已定义给定作用域:使用 JavaScript 接入 API
在构建 API 时, 如果能通过 JavaScript 应用接入自己的 API 将会给开发过程带来极大的便利。这种 API 开发方法允许你使用自己的应用程序的 API 和别人共享的 API 。你的 Web 应用程序、移动应用程序、第三方应用程序以及可能在各种软件包管理器上发布的任何 SDK 都可能会使用相同的 API 。
通常,如果要在 JavaScript 应用程序中使用 API ,需要手动向应用程序发送访问令牌,并将其传递给应用程序。但是, Passport 有一个可以处理这个问题的中间件。将
rrreeeCreateFreshApiToken
中间件添加到app/Http/Kernel.php
文件中的web
中间件组就可以了:{note} 你应该确保在您的中间件堆栈中
CreateFreshApiToken
中间件之前列出了EncryptCookies
中间件。这个 Passport 中间件将在你所有的对外请求中添加一个
rrreeelaravel_token
cookie 。该 cookie 将包含一个加密后的 JWT , Passport 将用来验证来自 JavaScript 应用程序的 API 请求。至此,你可以在不明确传递访问令牌的情况下向应用程序的 API 发出请求:自定义 Cookie 名称
如果需要,你可以在
rrreeeAuthServiceProvider
的boot
方法中使用Passport::cookie
方法来自定义laravel_token
cookie 的名称。CSRF 保护
当使用这种授权方法时,默认的 Laravel JavaScript 脚手架会让 Axios 发送
X-CSRF-TOKEN
和X-Requested-With
rrreeeMéthode de portée supplémentaire
rrreeescopeIds
renverra tous les tableaux des ID/noms définis :rrreee🎜scopes
La méthode renverra une instance deLaravelPassportScope
contenant un tableau de toutes les étendues définies :scopesFor Le code> renverra un tableau d'instances
LaravelPassportScope
qui correspondent à l'ID/nom donné : 🎜rrreee🎜Vous pouvez utiliser la méthodehasScope
pour déterminer si une portée donnée est définie : 🎜rrreee 🎜🎜🎜🎜Utilisez JavaScript pour accéder à l'API
🎜Construire une API, si vous pouvez accéder à votre propre API via des applications JavaScript, cela apportera une grande commodité au processus de développement. Cette méthode de développement d'API vous permet d'utiliser l'API de votre propre application et les API partagées par d'autres. Votre application Web, votre application mobile, vos applications tierces et tous les SDK que vous pourriez publier sur différents gestionnaires de packages utiliseront probablement la même API. 🎜🎜Normalement, si vous souhaitez utiliser l'API dans une application JavaScript, vous devez envoyer manuellement le jeton d'accès et le transmettre à l'application. Cependant, Passport dispose d'un middleware qui gère ce problème. Ajoutez simplement le middlewareCreateFreshApiToken
au groupe de middlewaresweb
dans le fichierapp/Http/Kernel.php
: 🎜rrreee🎜{note } Vous devez vous assurer que le middleware
🎜Ce middleware Passport ajoutera un cookieEncryptCookies
est répertorié avant le middlewareCreateFreshApiToken
dans votre pile de middleware. 🎜laravel_token
à toutes vos demandes sortantes. Ce cookie contiendra un JWT crypté que Passport utilisera pour authentifier les requêtes API des applications JavaScript. À ce stade, vous pouvez faire des requêtes à l'API de votre application sans transmettre explicitement le jeton d'accès : 🎜rrreee🎜🎜Nom du cookie personnalisé🎜🎜Si nécessaire, vous pouvez utiliser le MéthodePassport::cookie
dans la méthodeboot
deAuthServiceProvider
pour personnaliser le nom du cookielaravel_token
. 🎜rrreee🎜🎜Protection CSRF🎜🎜Lors de l'utilisation de cette méthode d'autorisation, l'échafaudage JavaScript Laravel par défaut amènera Axios à envoyer le codeX-CSRF-TOKEN > et les en-têtes de requête
X-Requested-With
. De plus, vous devez vous assurer que le jeton CSRF est inclus dans la balise méta HTML : 🎜rrreee🎜🎜🎜🎜🎜🎜Événements
Passport déclenche des événements lorsque des jetons d'accès et des jetons d'actualisation sont émis. Vous pouvez ajouter des écouteurs pour ces événements dans le
rrreeeEventServiceProvider
de votre application et révoquer ou modifier d'autres jetons dans l'écouteur :EventServiceProvider
中为这些事件追加监听器,并在监听器中撤销或修改其他令牌:测试
Passport 的
🎜La méthodeactingAs
方法可以指定当前已认证用户及其作用域。actingAs
rrreeeactingAs
de Passport peut spécifier l'utilisateur actuellement authentifié et sa portée. Le premier paramètre de la méthodeactingAs
est l'instance de l'utilisateur, et le deuxième paramètre est le tableau de portée du jeton utilisateur : 🎜rrreee🎜Cet article a été publié pour la première fois sur le site Web 🎜LearnKu.com🎜. 🎜🎜