PHPackages                             yowedjamal/bjpass-backend-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. yowedjamal/bjpass-backend-sdk

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

yowedjamal/bjpass-backend-sdk
=============================

Backend SDK PHP pour BjPass - gestion OAuth2/OIDC (exchange, introspect, jwks, validation) avec intégration Laravel

1.0.2(8mo ago)06MITHTMLPHP ^8.1

Since Aug 14Pushed 8mo agoCompare

[ Source](https://github.com/yowedjamal/bjpass-backend-sdk)[ Packagist](https://packagist.org/packages/yowedjamal/bjpass-backend-sdk)[ RSS](/packages/yowedjamal-bjpass-backend-sdk/feed)WikiDiscussions develop Synced 1mo ago

READMEChangelog (8)Dependencies (9)Versions (14)Used By (0)

BjPass Backend SDK - Package Laravel
====================================

[](#bjpass-backend-sdk---package-laravel)

Un package Laravel complet pour l'authentification OAuth2/OIDC avec BjPass, fournissant une intégration clé en main pour votre application backend.

🚀 Installation
--------------

[](#-installation)

### 1. Installation via Composer

[](#1-installation-via-composer)

```
composer require yowedjamal/bjpass-backend-sdk
```

### 2. Publication de la configuration

[](#2-publication-de-la-configuration)

```
php artisan vendor:publish --provider="BjPass\Providers\BjPassServiceProvider" --tag=bjpass-config
```

### 3. Configuration des variables d'environnement

[](#3-configuration-des-variables-denvironnement)

Ajoutez ces variables dans votre fichier `.env` :

```
# Configuration BjPass OIDC
BJPASS_BASE_URL=https://tx-pki.gouv.bj
BJPASS_AUTH_SERVER=main-as
BJPASS_CLIENT_ID=your_client_id
BJPASS_CLIENT_SECRET=your_client_secret
BJPASS_REDIRECT_URI=https://your-app.com/auth/callback
BJPASS_SCOPE=openid profile email
BJPASS_ISSUER=https://tx-pki.gouv.bj

# Configuration avancée
BJPASS_FRONTEND_ORIGIN=https://your-frontend.com
BJPASS_USE_SECURE_COOKIES=true
BJPASS_REVOKE_TOKENS_ON_LOGOUT=true
```

### 4. Publication des routes (optionnel)

[](#4-publication-des-routes-optionnel)

```
php artisan vendor:publish --provider="BjPass\Providers\BjPassServiceProvider" --tag=bjpass-routes
```

📋 Configuration
---------------

[](#-configuration)

Le package est configuré via le fichier `config/bjpass.php`. Voici les principales options :

### Configuration OIDC

[](#configuration-oidc)

- `base_url` : URL de base du provider OIDC
- `auth_server` : Serveur d'authentification à utiliser
- `client_id` : Identifiant client OAuth2
- `client_secret` : Secret client OAuth2
- `redirect_uri` : URI de redirection après authentification
- `scope` : Scopes OAuth2 demandés

### Configuration de sécurité

[](#configuration-de-sécurité)

- `jwks_cache_ttl` : Durée de vie du cache JWKS (en secondes)
- `auth_session_max_age` : Durée maximale de la session d'authentification
- `max_token_age` : Âge maximal des tokens acceptés
- `revoke_tokens_on_logout` : Révoquer les tokens lors de la déconnexion

### Configuration des cookies

[](#configuration-des-cookies)

- `use_secure_cookies` : Utiliser des cookies sécurisés
- `session_cookie_name` : Nom du cookie de session
- `session_cookie_lifetime` : Durée de vie du cookie de session

🔧 Utilisation
-------------

[](#-utilisation)

### Utilisation basique avec la façade

[](#utilisation-basique-avec-la-façade)

```
use BjPass\Facades\BjPass;

// Créer une URL d'autorisation
$authData = BjPass::createAuthorizationUrl();

// Échanger un code contre des tokens
$result = BjPass::exchangeCode($code, $state);

// Vérifier l'authentification
if (BjPass::isAuthenticated()) {
    $user = BjPass::getUserInfo();
}

// Déconnexion
BjPass::logout();
```

### Utilisation avec injection de dépendances

[](#utilisation-avec-injection-de-dépendances)

```
use BjPass\BjPass;

class AuthController extends Controller
{
    public function __construct(private BjPass $bjpass) {}

    public function login()
    {
        $authData = $this->bjpass->createAuthorizationUrl();
        return redirect()->away($authData['authorization_url']);
    }

    public function callback(Request $request)
    {
        $result = $this->bjpass->exchangeCode(
            $request->query('code'),
            $request->query('state')
        );

        return response()->json($result);
    }
}
```

### Middleware d'authentification

[](#middleware-dauthentification)

Protégez vos routes avec le middleware BjPass :

```
Route::middleware(['bjpass.auth'])->group(function () {
    Route::get('/dashboard', function () {
        $user = request('bjpass_user');
        return view('dashboard', compact('user'));
    });
});
```

🌐 Endpoints HTTP intégrés
-------------------------

[](#-endpoints-http-intégrés)

Le package fournit automatiquement ces endpoints :

### Authentification

[](#authentification)

- `GET /auth/start` - Démarrer le flux d'authentification
- `GET /auth/callback` - Gérer le retour du provider OIDC
- `GET /auth/error` - Page d'erreur d'authentification

### API

[](#api)

- `GET /auth/api/status` - Vérifier le statut d'authentification
- `GET /auth/api/user` - Obtenir les informations utilisateur
- `POST /auth/api/logout` - Déconnexion
- `POST /auth/api/refresh` - Rafraîchir le token d'accès
- `POST /auth/api/introspect` - Introspecter un token

### Routes protégées

[](#routes-protégées)

- `GET /auth/protected/dashboard` - Exemple de route protégée

🔐 Sécurité
----------

[](#-sécurité)

### Gestion des sessions

[](#gestion-des-sessions)

- Stockage sécurisé des tokens en session Laravel
- Cookies HTTPOnly optionnels pour une sécurité renforcée
- Rotation automatique des refresh tokens

### Validation des tokens

[](#validation-des-tokens)

- Validation cryptographique des signatures JWT via JWKS
- Vérification des claims OIDC (aud, iss, exp, iat, nonce)
- Cache intelligent des clés publiques JWKS

### Protection CSRF

[](#protection-csrf)

- Validation automatique du paramètre `state`
- Vérification de l'origine des requêtes
- Protection contre les attaques de rejeu

🔄 Intégration avec le SDK Frontend
----------------------------------

[](#-intégration-avec-le-sdk-frontend)

### Configuration du frontend

[](#configuration-du-frontend)

```
const bjpassConfig = {
    // Configuration backend
    backendUrl: 'https://your-backend.com',
    authEndpoints: {
        start: '/auth/start',
        status: '/auth/api/status',
        user: '/auth/api/user',
        logout: '/auth/api/logout'
    },

    // Configuration OIDC
    clientId: 'your_client_id',
    scope: 'openid profile email',

    // Callbacks
    onSuccess: (user) => {
        console.log('Authentifié:', user);
    },
    onError: (error) => {
        console.error('Erreur:', error);
    }
};
```

### Flux d'authentification

[](#flux-dauthentification)

1. **Démarrage** : Le frontend ouvre `/auth/start` dans une popup
2. **Redirection** : L'utilisateur est redirigé vers le provider OIDC
3. **Callback** : Le provider redirige vers `/auth/callback`
4. **Communication** : La page de callback communique avec le frontend via `postMessage`
5. **Vérification** : Le frontend vérifie le statut via `/auth/api/status`

🧪 Tests
-------

[](#-tests)

### Exécution des tests

[](#exécution-des-tests)

```
composer test
```

### Tests avec couverture

[](#tests-avec-couverture)

```
composer test-coverage
```

### Analyse statique

[](#analyse-statique)

```
composer analyse
```

📚 API Reference
---------------

[](#-api-reference)

### Méthodes principales

[](#méthodes-principales)

#### `createAuthorizationUrl(array $params = [])`

[](#createauthorizationurlarray-params--)

Crée une URL d'autorisation OAuth2 avec PKCE.

**Paramètres :**

- `state` : Paramètre state personnalisé (optionnel)
- `nonce` : Paramètre nonce personnalisé (optionnel)

**Retour :**

```
[
    'authorization_url' => 'https://...',
    'state' => 'generated_state',
    'nonce' => 'generated_nonce',
    'code_verifier' => 'generated_code_verifier'
]
```

#### `exchangeCode(string $code, string $state)`

[](#exchangecodestring-code-string-state)

Échange un code d'autorisation contre des tokens.

**Retour :**

```
[
    'user' => [
        'sub' => 'user_id',
        'name' => 'User Name',
        'email' => 'user@example.com'
    ],
    'tokens' => [
        'access_token' => '...',
        'refresh_token' => '...',
        'expires_in' => 3600,
        'token_type' => 'Bearer'
    ]
]
```

#### `validateIdToken(string $idToken, ?string $expectedNonce = null)`

[](#validateidtokenstring-idtoken-string-expectednonce--null)

Valide un ID token JWT.

#### `isAuthenticated()`

[](#isauthenticated)

Vérifie si l'utilisateur est authentifié.

#### `getUserInfo()`

[](#getuserinfo)

Récupère les informations de l'utilisateur connecté.

#### `logout()`

[](#logout)

Déconnecte l'utilisateur et révoque les tokens.

### Services disponibles

[](#services-disponibles)

#### `getAuthService()`

[](#getauthservice)

Retourne l'instance du service d'authentification.

#### `getTokenService()`

[](#gettokenservice)

Retourne l'instance du service de validation des tokens.

#### `getJwksService()`

[](#getjwksservice)

Retourne l'instance du service de gestion des JWKS.

🚨 Gestion des erreurs
---------------------

[](#-gestion-des-erreurs)

### Exceptions personnalisées

[](#exceptions-personnalisées)

```
use BjPass\Exceptions\BjPassException;
use BjPass\Exceptions\InvalidTokenException;
use BjPass\Exceptions\AuthenticationException;

try {
    $result = BjPass::exchangeCode($code, $state);
} catch (InvalidTokenException $e) {
    // Token invalide ou expiré
    Log::error('Token invalide: ' . $e->getMessage());
} catch (AuthenticationException $e) {
    // Erreur d'authentification
    Log::error('Erreur auth: ' . $e->getMessage());
} catch (BjPassException $e) {
    // Erreur générale
    Log::error('Erreur BjPass: ' . $e->getMessage());
}
```

### Codes d'erreur

[](#codes-derreur)

- `invalid_token` : Token invalide ou expiré
- `invalid_state` : Paramètre state invalide
- `authentication_failed` : Échec de l'authentification
- `session_expired` : Session expirée
- `insufficient_permissions` : Permissions insuffisantes

🔧 Personnalisation
------------------

[](#-personnalisation)

### Configuration avancée

[](#configuration-avancée)

```
// Dans config/bjpass.php
'custom_error_messages' => [
    'authentication_failed' => 'Votre authentification a échoué. Veuillez réessayer.',
    'invalid_token' => 'Votre session a expiré. Veuillez vous reconnecter.',
],

'log_level' => 'debug',
'debug' => true,
```

### Middleware personnalisé

[](#middleware-personnalisé)

```
// Créer un middleware personnalisé
class CustomBjPassMiddleware
{
    public function handle($request, Closure $next)
    {
        if (!BjPass::isAuthenticated()) {
            // Logique personnalisée
            return redirect('/custom-login');
        }

        return $next($request);
    }
}
```

📦 Structure du package
----------------------

[](#-structure-du-package)

```
src/
├── BjPass.php                    # Classe principale
├── Exceptions/                   # Exceptions personnalisées
├── Facades/                      # Facade Laravel
├── Http/                         # Contrôleurs et middleware
│   ├── Controllers/
│   └── Middleware/
├── Providers/                    # ServiceProvider
└── Services/                     # Services métier
    ├── AuthService.php
    ├── JwksService.php
    └── TokenService.php

config/
└── bjpass.php                   # Configuration

routes/
└── bjpass.php                   # Routes intégrées

resources/
└── views/                       # Vues Blade
    ├── success.blade.php
    └── error.blade.php

```

🤝 Contribution
--------------

[](#-contribution)

1. Fork le projet
2. Créez une branche pour votre fonctionnalité
3. Committez vos changements
4. Poussez vers la branche
5. Ouvrez une Pull Request

📄 Licence
---------

[](#-licence)

Ce package est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails.

🆘 Support
---------

[](#-support)

Pour toute question ou problème :

- Ouvrez une issue sur GitHub
- Consultez la documentation
- Contactez l'équipe de développement

---

**Développé avec ❤️ par l'équipe BjPass**

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance58

Moderate activity, may be stable

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

12

Last Release

267d ago

Major Versions

0.0.9 → 1.0.02025-08-14

### Community

Maintainers

![](https://www.gravatar.com/avatar/f5c86790fa9232a3d7b3616398197a4b7f8dcc48e7c995324970df148d856a21?d=identicon)[yowedjamal](/maintainers/yowedjamal)

---

Top Contributors

[![yowedjamal](https://avatars.githubusercontent.com/u/188854762?v=4)](https://github.com/yowedjamal "yowedjamal (43 commits)")

---

Tags

laravelsdkAuthenticationoauth2oidcbjpass

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/yowedjamal-bjpass-backend-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/yowedjamal-bjpass-backend-sdk/health.svg)](https://phpackages.com/packages/yowedjamal-bjpass-backend-sdk)
```

###  Alternatives

[google/auth

Google Auth Library for PHP

1.4k272.7M162](/packages/google-auth)[jeremy379/laravel-openid-connect

OpenID Connect support to the PHP League's OAuth2 Server. Compatible with Laravel Passport.

55342.3k2](/packages/jeremy379-laravel-openid-connect)[ellaisys/aws-cognito

AWS Cognito package that allows Auth and other related features using the AWS SDK for PHP

120220.7k1](/packages/ellaisys-aws-cognito)[simplesamlphp/simplesamlphp-module-oidc

A SimpleSAMLphp module adding support for the OpenID Connect protocol

5016.9k1](/packages/simplesamlphp-simplesamlphp-module-oidc)[kinde-oss/kinde-auth-php

Kinde PHP SDK for authentication

2369.5k3](/packages/kinde-oss-kinde-auth-php)[maicol07/laravel-oidc-client

OpenID Connect Client for Laravel

251.1k](/packages/maicol07-laravel-oidc-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
