GithubHelp home page GithubHelp logo

azophy / experiment-laravel-keycloak Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 162 KB

Experiment implementing Keycloak login with Laravel

Shell 2.13% Dockerfile 0.62% PHP 74.32% CSS 4.18% JavaScript 0.49% Blade 18.25%

experiment-laravel-keycloak's Introduction

EXPERIMENT SETUP LOGIN LARAVEL DENGAN KEYCLOAK

CONCLUSION

Sudah coba dirangkum dalam tutorial di: https://wiki.digitalservice.id/doc/tutorial-integrasi-keycloak-laravel-MK3qD0kBIN

urutan plan

used applications

  • docker with docker-compose
  • Laravel 9 , PHP 8.1

how to user this repo

  1. Clone this repo
  2. docker compose up

cara config keycloak (setup realm, user, client)

  • manual: ikuti tutorial di https://www.keycloak.org/getting-started/getting-started-docker#_create_a_realm

  • otomatis:

    1. pastikan server keycloak sudah jalan
    2. jalan script utk auto setup dengan command:
    docker compose exec keycloak sh /app/scripts/keycloak-autosetup-example.sh
    

    script di atas akan membuat realm, user, & client dengan rincian:

    • nama realm: test_realm
    • nama client: test_client
    • nama user: testuser, password: testpassword
  • cara test: bisa memanfaatkan aplikasi tester dari keycloak di keycloak.org/app . cukup masukkan alamat server keylok, nama realm, serta nama client. setelah itu bisa coba login dengan username yang sudah dibuat di tahap sebelumnya

example 1: With Laravel Socialite

step using this repo

  1. preparation
cd example-socialite
echo 'APP_KEY=' > .env
touch database/database.sqlite

# using docker
docker compose up
docker compose exec web sh -c "cd /app ; php artisan key:generate"

# without docker
composer install
php artisan key:generate
  1. config keycloak & laravel socialite. Script setting keycloak yang ada di repo ini masih butuh di setting, khususnya untuk base url & redirect url dari aplikasi yang akan kita koneksi-kan ke Keycloak.

  2. Test dengan membuka halaman web utama.

step from scratch:

  1. prepare php & composer. you may use:
docker run -it --rm -v "$PWD:/app" -w /app php:8.1-cli-alpine sh
curl -sS https://getcomposer.org/installer | php
  1. install laravel. what I use:
composer create-project laravel/laravel example-app

example 2: using laravel web guard plugin (github.com/mariovalney/laravel-keycloak-web-guard)

Sepemahaman saya, pendekatan ini hampir sama dengan pendekatan pertama via Socialite. Kalau dipikir2, memang keycloak by default menggunakan protokol OIDC, yang merupakan ekstensi dari protokol OAuth 2.0 yang digunakan Socialite. Akibatnya memang flow yang digunakan akan cukup banyak kemiripan.

Perbedaan utama dari penggunaan library vs socialite ini adalah lib ini sudah menyertakan beberapa fungsionalitas lengkap seperti route + controller utk login & logout, middleware utk memeriksa hasil login, dan lain-lain. Kesamaannya antara lain lib ini blm menyertakan implementasi model User di database yang siap pakai, sehingga opsinya antara membuat model baru atau meng-extend base model yang disediakan oleh lib ini.

steps from scratch

  1. install packages
composer require vizir/laravel-keycloak-web-guard
  1. export config
php artisan vendor:publish  --provider="Vizir\KeycloakWebGuard\KeycloakWebGuardServiceProvider"

  1. setup keycloak:
  1. add protected routes. example:
Route::get('/protected', function () {
    echo 'this page should be protected by login' ;
    echo '<br><pre>' ;
    print_r(Auth::user()) ;
    echo '</pre>' ;
    echo '<a href="/logout">Logout</a>';
})->middleware('keycloak-web');
  1. setting laravel
  • edit .env
  • edit redirect_url in config/keycloak-web.php into your protected route

Notes

Example 3 : Keycloak integration into Vanilla PHP project

Di sini saya mencoba melakukan integrasi dengan project PHP "kosongan" yang tanpa framework. Harapannya contoh yang ada di project ini bisa lebih applicable ke berbagai macam project, tidak cuman yg hanya berbasis laravel.

Example 4: Keycloak PHP integration with a project separated between BE & FE

plan:

install

  1. cd example-fe-be
  2. edit .env.example into .env
  3. docker compose up
  4. test: http --json localhost:8000/api/protected

experiment-laravel-keycloak's People

Contributors

azophy avatar

Watchers

 avatar

experiment-laravel-keycloak's Issues

Implement keycloak with docker compose using naive implementation

overview

docker-compose.yml is only naive conversion from the following docker command which included in Keycloak's Docker Setup Tutorial:

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:18.0.0 start-dev

results

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.