A major release. The OpenID Connect layer no longer comes from a package: it is part of the application, on top of Passport, which remains the OAuth 2.0 server. Relying parties may notice some of the changes below, so read Upgrading before you deploy.
Release notes on GitHub · Every change since v1.0.2
Highlights
- OpenID Connect built in. Discovery, the key set, ID Tokens, claims,
UserInfo, introspection, revocation and logout live in
app/Oidc, each behind an interface, so any part can be replaced by binding another class.admin9/laravel-oidc-serveris gone. - ID Tokens describe the sign-in. They carry the
noncesent to/oauth/authorizeand the realauth_time.max_ageandprompt=noneare honoured, and ID Tokens have a lifetime of their own. - A consent screen you word. A Consent tab in App settings sets the heading, the message, what each scope says, the signed-in account, remembered approvals and links to your policies, with a live preview.
- Single-page applications. Browser applications can call the protocol
endpoints once their origin is listed in
SSO_CORS_ALLOWED_ORIGINS.
Added
- Logout accepts
client_idandPOST, and asks the user to confirm when no validid_token_hintnames them. - Signing keys are read from
PASSPORT_PRIVATE_KEYandPASSPORT_PUBLIC_KEYwhen they are set, as Passport does. Key ids are unchanged. - The Sessions page searches, filters and pages both of its lists.
- Every listing pages by number, with the pages at the bottom right, and the access, managers and audit lists are searched and paged like the rest.
Changed
- Introspection answers confidential clients only.
- Introspection and revocation search every token type, and an unknown
token_type_hintis ignored, as RFC 7662 and RFC 7009 ask. - UserInfo requires the
openidscope. A missing or unusable token gets401withinvalid_tokenand aBearerchallenge, whatever the request accepts. - A refreshed ID Token keeps the original
auth_timeand carries nononce. config/oidc-server.phpis replaced byconfig/oidc.php.
Fixed
- Approving or denying on the consent screen, or signing in to an application that skips it, now reaches the application. The browser used to stay on this server with the authorization already made.
- A
client_idthat is not a UUID fails client authentication instead of raising an error on PostgreSQL. - Disabled applications can no longer authenticate as clients.
Upgrading
- Run
composer install, thenphp artisan migrate. The migration adds the columns that record a sign-in'snonceandauth_time. - Move any change you made to
config/oidc-server.phpintoconfig/oidc.php, then delete the old file. - Rebuild the front end with
npm ciandnpm run build. - Run
php artisan optimize:clear, thenphp artisan optimizein production. - List the origins of any single-page application in
SSO_CORS_ALLOWED_ORIGINS. - Check your relying parties against Changed. Those that
introspect as a public client, or send
nonceonly to the token endpoint, need updating.