joandysson / php-oidc-client
Local OIDC client helpers for scaffold-style PHP projects.
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.10
Requires (Dev)
- phpunit/phpunit: ^11.5
README
Mini lib para integrar login OIDC em projetos PHP no mesmo estilo de scaffold usado pelo devot-api.
Package Composer:
joandysson/php-oidc-client
Licenca:
MIT
O que a lib entrega
Joandysson\OidcClient\Service\OidcAuthServiceJoandysson\OidcClient\Service\OidcUrlServiceJoandysson\OidcClient\Service\OidcSessionServiceJoandysson\OidcClient\Service\OidcHttpServiceJoandysson\OidcClient\Config\OidcClientConfigJoandysson\OidcClient\Middleware\StartSessionMiddlewareJoandysson\OidcClient\Middleware\RequireOidcAuthMiddleware- exceptions tipadas para configuracao, autenticacao e transporte
O que fica no app consumidor
- controller de login, callback e logout
- views de erro e logout
- rotas do app
- UI do sistema
Variaveis esperadas
APP_URL=http://localhost:8081 OIDC_ISSUER_URL=http://localhost OIDC_HTTP_BASE_URL=http://host.docker.internal OIDC_CLIENT_ID=toolz OIDC_CLIENT_SECRET=toolz OIDC_REDIRECT_URI=http://localhost:8081/auth/callback OIDC_SCOPES="openid profile email" SESSION_COOKIE_NAME=devot_session OIDC_LOCAL_LOGIN_PATH=/auth/login OIDC_REGISTER_PATH=/register OIDC_FORGOT_PASSWORD_PATH=/forgot-password OIDC_LOGOUT_PATH=/oauth/logout
Instalacao
Via Composer:
composer require joandysson/php-oidc-client
Se o projeto roda em Docker, execute o Composer dentro do container da aplicacao. Exemplo:
docker compose exec -T app composer require joandysson/php-oidc-client
Integracao minima
- Instale a lib via Composer.
- Registre
Joandysson\\OidcClient\\Middleware\\StartSessionMiddlewareno middleware global. - Proteja web/admin e writes com
Joandysson\\OidcClient\\Middleware\\RequireOidcAuthMiddleware. - No seu controller, use
Joandysson\\OidcClient\\Service\\OidcAuthServicepara:- gerar a URL de authorize
- trocar
codepor token - carregar
userinfo - manter a sessao local
- renovar token com
refresh_tokenquando necessario - limpar a sessao no logout
- montar URLs auxiliares para cadastro, reset e logout no Auth Central
Refresh token
O OidcAuthService armazena expires_in, expires_at, access_token e refresh_token na sessao local apos o
callback. Para renovar tokens:
refresh(): arrayforcagrant_type=refresh_token, atualizauserinfoe substitui os tokens na sessao.refreshIfNeeded(int $leewaySeconds = 60): ?arrayrenova apenas quando o access token esta vencido, perto de vencer ou quando a sessao antiga nao possuiexpires_at.
O RequireOidcAuthMiddleware chama refreshIfNeeded() antes de liberar uma rota protegida. Se a renovacao falhar,
ele limpa a sessao local e redireciona para o login ou retorna 401 em APIs.
Callback e URLs com retorno
Para manter compatibilidade, handleCallback() continua retornando apenas o return_to. Quando o app consumidor
precisar do usuario e tokens no mesmo passo, use:
handleCallbackResult(?string $code, ?string $state): OidcCallbackResultcurrentUserOrRefresh(int $leewaySeconds = 60): ?array
Para telas do Auth Central que precisam voltar ao sistema consumidor pelo fluxo OIDC, use:
registerUrlForReturnTo(string $returnTo, ?string $clientId = null): stringforgotPasswordUrlForReturnTo(string $returnTo): stringprofileUrlForReturnTo(string $returnTo): string
Esses helpers usam authorizeUrl() internamente para criar state e PKCE reais antes de montar o return_to.
Helpers adicionais
O OidcAuthService tambem expoe:
registerUrl(?string $clientId = null): stringprofileUrlForReturnTo(string $returnTo): stringforgotPasswordUrl(): stringproviderLogoutUrl(?string $postLogoutRedirectUri = null): string
Esses helpers sao uteis quando o sistema consumidor quer manter uma tela propria de entrada, mas ainda encaminhar o usuario para as telas corretas do Auth Central.
Estrutura interna
Config/Exception/Middleware/Service/Support/
Documentacao complementar:
AGENTS.mddocs/AI_CONTEXT.mddocs/ARCHITECTURE.md
Assuncoes
- o projeto consumidor fornece
App\\Config\\Request\\Request - o projeto consumidor fornece
App\\Config\\Response\\Response - o projeto consumidor usa sessao PHP padrao