PHPackages                             alisafari-dev/laravel-keycloak-sso - 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. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. alisafari-dev/laravel-keycloak-sso

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

alisafari-dev/laravel-keycloak-sso
==================================

Keycloak SSO integration for Laravel with prefixed routes and Socialite.

v1.0.5(today)06↑2900%MITPHPPHP ^8.3

Since Jun 13Pushed todayCompare

[ Source](https://github.com/alisafari-dev/sso-laravel)[ Packagist](https://packagist.org/packages/alisafari-dev/laravel-keycloak-sso)[ RSS](/packages/alisafari-dev-laravel-keycloak-sso/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (3)Versions (6)Used By (0)

Laravel Keycloak SSO
====================

[](#laravel-keycloak-sso)

پکیج Laravel برای اتصال [Keycloak](https://www.keycloak.org/) با [Socialite](https://laravel.com/docs/socialite) و [SocialiteProviders/Keycloak](https://socialiteproviders.com/Keycloak/).

مسیرها با **prefix** ثبت می‌شوند تا با routeهای بقیه سرویس‌ها یا ماژول‌های پروژه تداخل نداشته باشند.

ویژگی‌ها
--------

[](#ویژگی‌ها)

- نصب خودکار `laravel/socialite` و `socialiteproviders/keycloak`
- ثبت خودکار درایور Keycloak در Socialite
- route، view و migration آماده
- prefix قابل تنظیم برای routeها (پیش‌فرض: `/sso`)
- sync کاربر محلی بر اساس claim قابل تنظیم (پیش‌فرض: `employeeID` → `personal_id`)
- logout کامل از Laravel و Keycloak

پیش‌نیازها
----------

[](#پیش‌نیازها)

- PHP 8.3+
- Laravel 11 / 12 / 13
- یک سرور Keycloak در دسترس

نصب
---

[](#نصب)

### ۱. افزودن repository (اگر روی Packagist نیست)

[](#۱-افزودن-repository-اگر-روی-packagist-نیست)

در `composer.json` پروژه:

```
"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/YOUR_USER/laravel-keycloak-sso"
    }
],
"require": {
    "asafari/laravel-keycloak-sso": "^1.0"
}
```

### ۲. نصب پکیج

[](#۲-نصب-پکیج)

```
composer require asafari/laravel-keycloak-sso
php artisan vendor:publish --tag=keycloak-sso-config
php artisan vendor:publish --tag=keycloak-sso-migrations
php artisan migrate
```

وابستگی‌های زیر به‌صورت خودکار نصب می‌شوند:

- `laravel/socialite`
- `socialiteproviders/keycloak`

معماری
------

[](#معماری)

```
کاربر → /sso/login → /sso/auth/keycloak → Keycloak
                                              ↓
                                    /sso/callback
                                              ↓
                              ایجاد/به‌روزرسانی User
                                              ↓
                              redirect_after_login

```

تنظیم Keycloak
--------------

[](#تنظیم-keycloak)

در **Clients → Create client** (OpenID Connect, confidential):

فیلدمقدار نمونهClient ID`laravel-app`Valid redirect URIs`http://your-host/sso/callback`Valid post logout redirect URIs`http://your-host/`Root URL`http://your-host`نکات:

- `KEYCLOAK_REDIRECT_URI` باید **دقیقاً** با Valid redirect URIs یکی باشد.
- post-logout معمولاً با `/` انتهایی ثبت می‌شود: `http://your-host/`
- claim شناسه کاربر (پیش‌فرض `employeeID`) باید در userinfo یا token mapper Keycloak موجود باشد.

متغیرهای محیطی
--------------

[](#متغیرهای-محیطی)

```
APP_URL=http://your-host

# Keycloak
KEYCLOAK_BASE_URL=http://keycloak-host:8080
KEYCLOAK_REALM=master
KEYCLOAK_CLIENT_ID=laravel-app
KEYCLOAK_CLIENT_SECRET=your-client-secret
KEYCLOAK_REDIRECT_URI="${APP_URL}/sso/callback"
KEYCLOAK_POST_LOGOUT_REDIRECT_URI="${APP_URL}/"

# پکیج (اختیاری)
KEYCLOAK_SSO_ROUTE_PREFIX=sso
KEYCLOAK_SSO_USER_MODEL=App\\Models\\User
KEYCLOAK_SSO_USER_IDENTIFIER_COLUMN=personal_id
KEYCLOAK_SSO_USER_IDENTIFIER_CLAIM=employeeID
KEYCLOAK_SSO_PLACEHOLDER_EMAIL_DOMAIN=sso.local
KEYCLOAK_SSO_REDIRECT_AFTER_LOGIN=dashboard
KEYCLOAK_SSO_ROUTES_ENABLED=true
KEYCLOAK_SSO_LOGIN_VIEW=keycloak-sso::login
```

متغیرپیش‌فرضتوضیح`KEYCLOAK_BASE_URL`—آدرس Keycloak بدون `/realms/...``KEYCLOAK_REALM``master`نام realm`KEYCLOAK_CLIENT_ID`—Client ID`KEYCLOAK_CLIENT_SECRET`—Secret کلاینت confidential`KEYCLOAK_REDIRECT_URI`—باید با callback در Keycloak یکی باشد`KEYCLOAK_POST_LOGOUT_REDIRECT_URI`—URI بازگشت بعد از logout`KEYCLOAK_SSO_ROUTE_PREFIX``sso`prefix مسیرها`KEYCLOAK_SSO_USER_IDENTIFIER_COLUMN``personal_id`ستون شناسه در جدول users`KEYCLOAK_SSO_USER_IDENTIFIER_CLAIM``employeeID`claim در پاسخ Keycloak`KEYCLOAK_SSO_REDIRECT_AFTER_LOGIN``dashboard`route name بعد از login`KEYCLOAK_SSO_PLACEHOLDER_EMAIL_DOMAIN``sso.local`دامنه ایمیل موقت اگر email نباشدمسیرها
------

[](#مسیرها)

پیش‌فرض با prefix `sso`:

MethodURIRoute nameGET`/sso/login``keycloak-sso.login`GET`/sso/auth/keycloak``keycloak-sso.redirect`GET`/sso/callback``keycloak-sso.callback`POST`/sso/logout``keycloak-sso.logout`برای تغییر prefix:

```
KEYCLOAK_SSO_ROUTE_PREFIX=auth/sso
```

آنگاه callback می‌شود: `/auth/sso/callback` — همان را در Keycloak ثبت کنید.

یکپارچه‌سازی با پروژه
---------------------

[](#یکپارچه‌سازی-با-پروژه)

### ۱. مدل User

[](#۱-مدل-user)

ستون شناسه (از migration پکیج) و fillable:

```
#[Fillable(['name', 'email', 'password', 'personal_id'])]
class User extends Authenticatable
{
    // ...
}
```

### ۲. redirect مهمان‌ها

[](#۲-redirect-مهمان‌ها)

در `bootstrap/app.php`:

```
->withMiddleware(function (Middleware $middleware): void {
    $middleware->redirectGuestsTo(fn () => route('keycloak-sso.login'));
})
```

### ۳. دکمه خروج

[](#۳-دکمه-خروج)

```

    @csrf
    خروج

```

### ۴. (اختیاری) alias برای `/login`

[](#۴-اختیاری-alias-برای-login)

اگر Breeze یا لینک‌های قدیمی `route('login')` دارند:

```
Route::redirect('login', '/sso/login')->name('login');
```

سفارشی‌سازی
-----------

[](#سفارشی‌سازی)

### publish view

[](#publish-view)

```
php artisan vendor:publish --tag=keycloak-sso-views
```

فایل‌ها در `resources/views/vendor/keycloak-sso/` قرار می‌گیرند.

### تغییر claim شناسه

[](#تغییر-claim-شناسه)

اگر به‌جای `employeeID` از claim دیگری استفاده می‌کنید:

```
KEYCLOAK_SSO_USER_IDENTIFIER_CLAIM=sub
KEYCLOAK_SSO_USER_IDENTIFIER_COLUMN=keycloak_id
```

### تغییر مدل User

[](#تغییر-مدل-user)

```
KEYCLOAK_SSO_USER_MODEL=App\\Models\\Admin
```

رفع مشکل
--------

[](#رفع-مشکل)

### `Invalid redirect uri` در login

[](#invalid-redirect-uri-در-login)

- `KEYCLOAK_REDIRECT_URI` را با Valid redirect URIs در Keycloak مقایسه کنید.
- پروتکل، host، port و مسیر باید دقیقاً یکی باشند.

### `Invalid redirect uri` در logout

[](#invalid-redirect-uri-در-logout)

- `KEYCLOAK_POST_LOGOUT_REDIRECT_URI` را در Keycloak ثبت کنید.
- معمولاً `http://host/` (با `/` انتهایی) لازم است.

### `شناسه کاربر در اطلاعات Keycloak یافت نشد`

[](#شناسه-کاربر-در-اطلاعات-keycloak-یافت-نشد)

- claim تنظیم‌شده (`employeeID`) در userinfo Keycloak وجود ندارد.
- در Keycloak برای client، mapper مناسب اضافه کنید یا `KEYCLOAK_SSO_USER_IDENTIFIER_CLAIM` را تغییر دهید.

### `NOT NULL constraint failed: users.email`

[](#not-null-constraint-failed-usersemail)

- کاربر Keycloak email ندارد؛ پکیج برای کاربر جدید ایمیل `{username}@sso.local` می‌سازد.
- اگر email اجباری است، در Keycloak برای کاربر email تنظیم کنید.

License
-------

[](#license)

MIT

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

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

Every ~0 days

Total

5

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/250003570?v=4)[Asa](/maintainers/alisafari-dev)[@alisafari-dev](https://github.com/alisafari-dev)

### Embed Badge

![Health badge](/badges/alisafari-dev-laravel-keycloak-sso/health.svg)

```
[![Health](https://phpackages.com/badges/alisafari-dev-laravel-keycloak-sso/health.svg)](https://phpackages.com/packages/alisafari-dev-laravel-keycloak-sso)
```

###  Alternatives

[socialiteproviders/manager

Easily add new or override built-in providers in Laravel Socialite.

42645.6M574](/packages/socialiteproviders-manager)[directorytree/ldaprecord-laravel

LDAP Authentication &amp; Management for Laravel.

5742.2M17](/packages/directorytree-ldaprecord-laravel)[illuminate/auth

The Illuminate Auth package.

9327.9M1.2k](/packages/illuminate-auth)[genealabs/laravel-socialiter

Automatically manage user persistence and resolution for any Laravel Socialite provider.

134421.5k](/packages/genealabs-laravel-socialiter)[truckersmp/steam-socialite

Laravel Socialite provider for Steam OpenID.

1517.7k](/packages/truckersmp-steam-socialite)

PHPackages © 2026

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