Adaptador de Keycloak para o Laravel. Esse adaptador utiliza os pacotes:
- "paragonie/random_compat":
"v2.0.9"
- "league/oauth2-client":
"2.2.1"
- "stevenmaguire/oauth2-keycloak":
"^2.1"
(as versões do oauth2-client
e do random_compat
foram fixadas devido a uma limitação do oauth2-keycloak
)
Para projetos com login de SSO, utilizando o Keycloak em aplicações construídas com a framework Laravel.
-
O pacote não está hospedado em um repositório externo (p.ex. packagist), portanto, devemos configurar um repositório local para o composer.
No arquivo
composer.json
na raiz da sua aplicação, adicionar:... // adicionar repositorio local "repositories": { "local": { "type": "vcs", "url": "https://gitlab.pbh.gov.br/prodabel-laravel-pacotes/keycloak-adapter.git" } }, ... "require": { "php": "^7.1.3", "fideloper/proxy": "^4.0", "laravel/framework": "5.7.*", "laravel/tinker": "^1.0", // adicionar pacote "prodabel/keycloakadapter": "*" }, ... "autoload": { "psr-4": { // adicionar classe no autoload "Prodabel\\KeycloakAdapter\\": "packages/Prodabel/KeycloakAdapter/src", "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] },
-
Agora sim, podemos baixar o pacote local, via Composer:
$ composer update
- A fim de publicar as configurações do
Keycloak
, executar o comando:Esse comando, criará:$ php artisan vendor:publish --provider="Prodabel\KeycloakAdapter\KeycloakAdapterServiceProvider"
-
o arquivo
config/keycloak.php
, com configurações do servidor Keycloak; -
o arquivo
config/keycloak_auth.php
, com configurações para a autenticação em Laravel.Para que a autenticação funcione automaticamente, substitua o arquivo
config/auth.php
pelo arquivoconfig/keycloak_auth.php
.(O Laravel não permite a substituição automática para evitar que as configurações do desenvolvedor sejam sobrescritas erradamente)
-
- No arquivo
.env
, adicionar:(Preencher as informações com os parâmetros da sua aplicação)KEYCLOAK_AUTHSERVERURL=http://keycloak.qa.pbh/auth KEYCLOAK_REALM=teste_cecilia KEYCLOAK_CLIENTID=teste2_dsv KEYCLOAK_CLIENTSECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx KEYCLOAK_RSA_PUBLIC_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx KEYCLOAK_REDIRECTURI=http://localhost:7000/login KEYCLOAK_REDIRECTLOGOUTURI=http://localhost:7000
- Por fim, é importante garantir que os cookies sejam sempre decriptados antes da autenticação. No arquivo
app/Http/Kernel.php
:protected $middlewarePriority = [ \Illuminate\Session\Middleware\StartSession::class, // adicionar middleware no array de prioridades \App\Http\Middleware\EncryptCookies::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\Authenticate::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Auth\Middleware\Authorize::class, ];
O pacote prodabel/keycloakadapter
já registra as seguintes rotas:
/oi
=> Rota de teste para usuários não autenticados. Imprime"Hello World!"
na tela./teste
=> Rota de teste para usuários autenticados. Imprime"rota protegida / usuário autenticado"
na tela./infousu
=> Rota para usuários autenticados. Imprime os dados do usuário logado na tela./login
=> Rota de login. Se autenticado, redireciona para a tela/home
, caso contrário, redireciona para o login do Keycloak./logout
=> Rota de logout. Realiza logout no Keycloak, limpa os cookies e a sessão.
Uma vez que o pacote esteja instalado e configurado, você já pode acessar essas rotas, ou sobrescrevê-las.
Please see the changelog for more information on what has changed recently.
license. Please see the license file for more information.