Maison  >  Article  >  cadre php  >  Développement Laravel : Comment simplifier l'authentification OAuth2 avec Laravel Passport ?

Développement Laravel : Comment simplifier l'authentification OAuth2 avec Laravel Passport ?

PHPz
PHPzoriginal
2023-06-13 10:33:131422parcourir

Avec la popularité des applications Web, OAuth2 est devenu l'un des protocoles d'authentification les plus populaires. OAuth2 offre aux utilisateurs un accès sécurisé et rapide via des jetons d'autorisation pour accéder aux ressources protégées.

Laravel est un framework d'application Web PHP populaire qui est devenu le premier choix des développeurs Web. Il possède des fonctionnalités puissantes et une syntaxe simple pour aider les développeurs Web à créer rapidement des applications Web de haute qualité. Laravel Passport est une implémentation OAuth2 très puissante dans Laravel, qui peut aider les développeurs à simplifier l'authentification OAuth2. Dans cet article, nous explorerons comment implémenter l'authentification OAuth2 à l'aide de Laravel Passport.

Introduction à Laravel Passport

Laravel Passport est une implémentation de serveur OAuth2 dans Laravel. Il peut aider les développeurs à créer rapidement des serveurs OAuth2 et à simplifier le processus d'authentification OAuth2. Il fournit non seulement une implémentation de la norme native OAuth2, mais fournit également des services tels que des clés API, des informations d'identification client et des jetons d'accès. Laravel Passport fournit également une série d'API pour gérer les clients, les clés et les jetons, et peut être parfaitement intégré au système d'authentification des utilisateurs de Laravel.

Utiliser Laravel Passport

L'installation de Laravel Passport est très simple et peut être réalisée à l'aide de Composer. Accédez au répertoire de votre application Laravel dans le terminal et entrez la commande suivante :

composer require laravel/passport

Ensuite, nous devons exécuter la commande d'installation de Laravel Passport. Nous pouvons utiliser la commande Artisan passport:install pour l'installer. Cette commande générera les migrations de bases de données nécessaires, certaines clés de chiffrement et un jeton d'accès à l'application. Nous pouvons exécuter directement la commande suivante : passport:install进行安装。该命令将生成必要的数据库迁移、一些加密密钥和应用程序访问令牌。我们可以直接运行以下命令:

php artisan passport:install

在运行该命令后,您应该看到类似以下的输出:

Encryption keys generated successfully.
Client ID: 1
Client secret: 9CrrluKEDJ3xvTLyHoSz3g3b5W3H4EBvLIS1G3V5

以上输出中的客户端ID和客户端秘钥是您在应用程序中注册OAuth2客户端所需的信息。客户端凭证使客户端能够获取用户令牌并访问您的API服务器。

现在,我们已经安装了Laravel Passport,接下来让我们来看看如何使用它来实现OAuth2认证。

生成API令牌

Laravel Passport提供了一个API令牌用于每个用户,该令牌可用于访问受保护的API端点。要生成API令牌,请使用以下代码:

$user = AppModelsUser::find(1);

$token = $user->createToken('MyApp')->accessToken;

在这个例子中,我们使用createToken方法来生成API令牌。我们需要提供一个标识字符串,以便在未来能够识别令牌。此方法将返回一个AccessToken实例,我们可以使用accessToken属性来获取令牌字符串。

要使用API令牌来访问受保护的API端点,我们需要将令牌附加到HTTP请求的头中。使用以下代码:

$request->header('Authorization', 'Bearer '.$accessToken);

在这个例子中,我们使用请求头Authorization来提供API令牌,其中令牌字符串通常以前缀“Bearer”开头。

在请求头中添加API令牌后,您可以访问受保护的API端点,并且服务器将使用API令牌来进行身份验证。

客户端凭证

OAuth2客户端凭证允许客户端代表用户从OAuth2服务器获取访问令牌。在Laravel Passport中,我们可以使用以下代码来注册OAuth2客户端:

use LaravelPassportClient;

$client = new Client;

$client->name = 'MyApp';
$client->redirect = 'http://example.com/callback';

$client->save();

$client->createToken()->accessToken;

我们可以使用上述方法来创建OAuth2客户端,并将客户端ID和客户端秘钥用于获取访问令牌。

OAuth2授权码

OAuth2授权码是一种流程,允许用户通过客户端代表用户请求OAuth2服务器获取访问令牌。Laravel Passport支持OAuth2授权码流程,还提供了用于管理授权码的API。例如,以下是如何创建OAuth2授权码的示例:

use LaravelPassportPassport;
use IlluminateHttpRequest;

Route::get('/redirect', function (Request $request) {
    $query = http_build_query([
        'client_id' => 'client-id',
        'redirect_uri' => 'http://example.com/callback',
        'response_type' => 'code',
        'scope' => '',
    ]);

    return redirect('http://example.com/oauth/authorize?'.$query);
});

Route::get('/callback', function (Request $request) {
    $token = Request::create(
        'http://example.com/oauth/token',
        'POST',
        [
            'grant_type' => 'authorization_code',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'redirect_uri' => 'http://example.com/callback',
            'code' => $request->code,
        ]
    );

    $response = Route::dispatch($token);

    return json_decode((string) $response->getContent(), true);
})->name('callback');

在上面的代码中,我们首先使用http_build_queryrrreee

Après avoir exécuté la commande, vous devriez voir un résultat similaire à celui-ci :

rrreee

L'ID client et le secret client dans la sortie ci-dessus sont les clients OAuth2 que vous avez enregistrés dans les informations requises de votre application. . Les informations d'identification du client permettent au client d'obtenir un jeton utilisateur et d'accéder à votre serveur API.

Maintenant que Laravel Passport est installé, voyons comment l'utiliser pour implémenter l'authentification OAuth2. 🎜🎜Générer un jeton API🎜🎜Laravel Passport fournit un jeton API pour chaque utilisateur, qui peut être utilisé pour accéder aux points de terminaison API protégés. Pour générer un jeton API, utilisez le code suivant : 🎜rrreee🎜 Dans cet exemple, nous utilisons la méthode createToken pour générer le jeton API. Nous devons fournir une chaîne d'identification afin que le jeton puisse être identifié à l'avenir. Cette méthode renverra une instance AccessToken et nous pourrons utiliser l'attribut accessToken pour obtenir la chaîne du jeton. 🎜🎜Pour utiliser un jeton API pour accéder à un point de terminaison API protégé, nous devons ajouter le jeton à l'en-tête de la requête HTTP. Utilisez le code suivant : 🎜rrreee🎜 Dans cet exemple, nous utilisons l'en-tête de requête Authorization pour fournir le jeton API, où la chaîne du jeton commence généralement par le préfixe "Bearer". 🎜🎜Après avoir ajouté le jeton API dans l'en-tête de la requête, vous pouvez accéder au point de terminaison API protégé et le serveur utilisera le jeton API pour s'authentifier. 🎜🎜Identifiants client🎜🎜Les informations d'identification du client OAuth2 permettent au client d'obtenir un jeton d'accès du serveur OAuth2 au nom de l'utilisateur. Dans Laravel Passport, nous pouvons utiliser le code suivant pour enregistrer le client OAuth2 : 🎜rrreee🎜 Nous pouvons utiliser la méthode ci-dessus pour créer le client OAuth2 et utiliser l'ID client et le secret client pour obtenir le jeton d'accès. 🎜🎜Code d'autorisation OAuth2🎜🎜Le code d'autorisation OAuth2 est un processus qui permet à un utilisateur de demander un serveur OAuth2 au nom de l'utilisateur via le client pour obtenir un jeton d'accès. Laravel Passport prend en charge le processus de code d'autorisation OAuth2 et fournit également une API pour gérer les codes d'autorisation. Par exemple, voici un exemple de création d'un code d'autorisation OAuth2 : 🎜rrreee🎜 Dans le code ci-dessus, nous utilisons d'abord la fonction http_build_query pour générer la chaîne de requête à transmettre au serveur OAuth2. Nous redirigeons ensuite vers le serveur OAuth2 et passons la chaîne de requête en paramètre. Lorsque l'utilisateur l'autorise, le serveur OAuth2 sera redirigé vers notre application. Dans notre route de rappel, nous générons un jeton d'accès pour une utilisation future pour accéder au point de terminaison de l'API protégé. 🎜🎜Conclusion🎜🎜Dans cet article, nous avons appris comment utiliser Laravel Passport pour simplifier le processus d'authentification OAuth2. Nous avons appris à générer des jetons API, à configurer les informations d'identification du client et à implémenter le flux de code d'autorisation OAuth2. Laravel Passport fournit une API facile à comprendre qui nous permet de mettre en œuvre rapidement une authentification OAuth2 sécurisée. Si vous souhaitez l'authentification OAuth2 dans votre application Laravel, alors Laravel Passport sera votre solution préférée. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn