PHPackages                             novvor/identity-laravel - 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. novvor/identity-laravel

ActiveLibrary

novvor/identity-laravel
=======================

Official Laravel adapter for the Novvor Cloud Identity 2.0 relying-party SDK.

v2.0.0(today)00Apache-2.0PHPPHP ^8.2CI passing

Since Jul 29Pushed todayCompare

[ Source](https://github.com/Novvor/identity-laravel)[ Packagist](https://packagist.org/packages/novvor/identity-laravel)[ RSS](/packages/novvor-identity-laravel/feed)WikiDiscussions main Synced today

READMEChangelog (2)Dependencies (10)Versions (2)Used By (0)

Novvor Identity Laravel 2.0
===========================

[](#novvor-identity-laravel-20)

Adaptador oficial de Laravel para integrar aplicaciones con Novvor Cloud Identity sin reconstruir OAuth/OIDC en cada producto.

El paquete se llama `novvor/identity-laravel`. La criptografía y el protocolo viven en `novvor/identity-sdk-php`; este adaptador aporta configuración, contenedor Laravel y una transacción de autorización cifrada y de un solo uso.

Perfil de seguridad
-------------------

[](#perfil-de-seguridad)

El perfil `novvor-high-assurance-v1` exige conjuntamente:

- Authorization Code Flow;
- PKCE S256;
- PAR (RFC 9126);
- JARM (`query.jwt`);
- DPoP (RFC 9449) con clave ES256 distinta por sesión;
- `state`, `nonce` y RFC 9207 `iss`;
- `redirect_uri` exacta;
- `private_key_jwt` para el cliente backend;
- validación RS256 de ID Token y vinculación `sub` con UserInfo.

No existe degradación automática a un flujo más débil. Si Discovery no prueba el perfil solicitado, el inicio falla cerrado antes de redirigir al navegador.

Instalación
-----------

[](#instalación)

La línea estable 2.x se instala íntegramente desde Packagist y consume el SDK core mediante el constraint estable `^2.0`. No requiere repositorios VCS, tokens de GitHub ni ramas de desarrollo.

```
composer require novvor/identity-laravel:^2.0
php artisan vendor:publish --tag=novvor-identity-config
```

Variables mínimas:

```
IDENTITY_ENABLED=true
IDENTITY_VALIDATE_ON_BOOT=true
IDENTITY_OIDC_PROFILE=novvor-high-assurance-v1
IDENTITY_OIDC_ISSUER=https://identity.example.com
IDENTITY_OIDC_CLIENT_ID=my-backend
IDENTITY_OIDC_REDIRECT_URI=https://app.example.com/auth/identity/callback
IDENTITY_OIDC_AUTHORIZATION_ENDPOINT=https://identity.example.com/oauth/authorize
IDENTITY_OIDC_TOKEN_ENDPOINT=https://identity.example.com/oauth/token
IDENTITY_OIDC_JWKS_URI=https://identity.example.com/.well-known/jwks.json
IDENTITY_OIDC_USERINFO_ENDPOINT=https://identity.example.com/oauth/userinfo
IDENTITY_OIDC_CLIENT_AUTH_METHOD=private_key_jwt
IDENTITY_OIDC_PRIVATE_KEY_ID=my-backend-key-2026-01
IDENTITY_OIDC_PRIVATE_KEY="secret reference supplied by the runtime"
```

No derive endpoints desde `APP_URL`, el `Host` del request ni concatenaciones. En producción, el boot gate rechaza hosts `.test`, `.local` y `localhost`.

Flujo Laravel recomendado
-------------------------

[](#flujo-laravel-recomendado)

```
use Illuminate\Http\Request;
use Novvor\Identity\Oidc\IdentityAuthorizationManager;

final class IdentityLoginController
{
    public function redirect(Request $request, IdentityAuthorizationManager $identity)
    {
        $url = $identity->begin(
            $request->session(),
            (string) $request->attributes->get('correlation_id'),
        );

        return redirect()->away($url);
    }

    public function callback(Request $request, IdentityAuthorizationManager $identity)
    {
        $result = $identity->complete(
            $request->session(),
            $request->query(),
            (string) $request->attributes->get('correlation_id'),
        );

        $request->session()->regenerate();

        // Mapear subject, tenant y roles mediante una política de la aplicación.
        // Nunca guardar access/id/refresh tokens completos en logs.
        return redirect()->intended('/manage');
    }
}
```

`IdentityAuthorizationManager`:

- mantiene hasta cinco inicios concurrentes para pestañas distintas;
- cifra `state`, `nonce`, PKCE verifier y clave privada DPoP con el encrypter de Laravel;
- limita las transacciones a diez minutos;
- consume la transacción antes del intercambio para impedir replay;
- compara Discovery con los endpoints configurados;
- usa PAR antes de exponer la URL al navegador;
- exige JARM en high assurance;
- valida ID Token y UserInfo antes de devolver identidad.

La aplicación consumidora sigue siendo responsable de autorización, tenant binding, role mapping, creación de sesión y logout local.

Refresh, revocación e introspección
-----------------------------------

[](#refresh-revocación-e-introspección)

El contenedor expone:

- `RefreshTokenClient`;
- `TokenRevocationClient`;
- `TokenIntrospectionClient`;
- `UserInfoClient`;
- `IdTokenValidator`.

El refresh client rechaza respuestas que no roten el refresh token. Los tokens son credenciales: no deben persistirse en logs, excepciones, telemetry ni URLs.

DPoP nonce
----------

[](#dpop-nonce)

El core acepta un nonce explícito para token y UserInfo. Ante `use_dpop_nonce`, reintenta exactamente una vez con el nonce emitido por el servidor en el intercambio de código, refresh y UserInfo. Una respuesta malformada o un segundo desafío falla cerrado.

Superficie de errores
---------------------

[](#superficie-de-errores)

`IdentityErrorSurfaceRedirector` permite delegar mensajes sanitizados a Identity. Nunca incluir tokens, secrets, authorization codes, OTP/MFA, cookies o stack traces en el mensaje.

Paquetes de la familia
----------------------

[](#paquetes-de-la-familia)

PaqueteResponsabilidad`novvor/identity-contracts`Claims y perfiles estables, sin transporte`novvor/identity-sdk-php`OAuth/OIDC core independiente del framework`novvor/identity-laravel`Integración oficial para Laravel`novvor/identity-admin-sdk-php`Control administrativo privilegiado`novvor/identity-sdk-testing`Fakes y fixtures públicos sin secretosLas operaciones administrativas no pertenecen al SDK de relying party.

Estado
------

[](#estado)

Identity SDK 2.0 y este adaptador tienen releases estables para integración. Los gates del paquete prueban el contrato local, pero no equivalen a certificación OpenID, staging ni readiness productiva del servidor Identity. Consulte `COMPATIBILITY.md`, `SECURITY.md` y `UPGRADING.md`.

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

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

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7697128?v=4)[Daniel](/maintainers/danifronter)[@danifronter](https://github.com/danifronter)

---

Top Contributors

[![danifronter](https://avatars.githubusercontent.com/u/7697128?v=4)](https://github.com/danifronter "danifronter (8 commits)")

---

Tags

dpopidentitylaraveloauth2oidcpkce

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/novvor-identity-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/novvor-identity-laravel/health.svg)](https://phpackages.com/packages/novvor-identity-laravel)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M348](/packages/psalm-plugin-laravel)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M134](/packages/roots-acorn)[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k108.5M928](/packages/laravel-socialite)[illuminate/routing

The Illuminate Routing package.

1419.2M3.3k](/packages/illuminate-routing)[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)[moonshine/moonshine

Laravel administration panel

1.3k253.1k86](/packages/moonshine-moonshine)

PHPackages © 2026

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