PHPackages                             sso\_otp\_sumut/jwt-authentication - 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. sso\_otp\_sumut/jwt-authentication

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

sso\_otp\_sumut/jwt-authentication
==================================

SSO Login menggunakan OTP

28PHP

Since Jan 9Pushed 1y ago1 watchersCompare

[ Source](https://github.com/restusatrio11/sso_otp_sumut_php)[ Packagist](https://packagist.org/packages/sso_otp_sumut/jwt-authentication)[ RSS](/packages/sso-otp-sumut-jwt-authentication/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)DependenciesVersions (1)Used By (0)

SSO OTP Sumut - Aplikasi Otentikasi SSO
=======================================

[](#sso-otp-sumut---aplikasi-otentikasi-sso)

Aplikasi otentikasi untuk SSO (Single Sign-On) yang digunakan oleh BPS Provinsi Sumatera Utara. Proyek ini mengintegrasikan otentikasi berbasis JWT yang menggunakan enkripsi AES-256 dan token aplikasi untuk memastikan otentikasi yang aman dan valid.

Prasyarat
---------

[](#prasyarat)

Pastikan kamu sudah menginstal dan menyiapkan software berikut:

- \[PHP\](versi 7.4 atau lebih baru)
- \[composer\]
- \[Yii2\]
- \[firebase/php-jwt\]- Untuk membuat dan memverifikasi token JWT

Instalasi
---------

[](#instalasi)

Langkah-langkah untuk menyiapkan dan menjalankan proyek secara lokal.

### 1. Clone repository

[](#1-clone-repository)

Clone repository proyek ini ke lokal dengan perintah berikut:

```
git clone
```

### 2. Masuk ke direktori proyek

[](#2-masuk-ke-direktori-proyek)

Masuk ke dalam direktori proyek yang sudah di-clone:

```
cd
```

### 3. Instal dependensi

[](#3-instal-dependensi)

Instal semua dependensi yang dibutuhkan menggunakan npm:

```
composer require firebase/php-jwt --ignore-platform-reqs
```

lalu install vendornya

```
composer require sso_otp_sumut/jwt-authentication:dev-main --ignore-platform-reqs
```

### 4. Pada file params.php

[](#4-pada-file-paramsphp)

file `params.php` di direktori root proyek (biasanya di config). Salin dan sesuaikan konfigurasi berikut:

```
return [
    'encryptionKey' => 'your_32_bytes_encryption_key_here',
    'secretKey' => 'your_secret_key_here',
    'appToken' => 'your_app_token_here',
    'ssoLoginURL' => 'your_sso_login_url_here',
];
```

Penjelasan variabel .env:

- encryptionKey: Kunci enkripsi 32 byte untuk mendekripsi data.
- secretKey: Kunci rahasia untuk menandatangani dan memverifikasi JWT.
- appToken: Token aplikasi yang digunakan untuk memverifikasi aplikasi pada sistem.
- ssoLoginURL: URL untuk halaman login SSO yang digunakan untuk otentikasi pengguna.

### 4. Pada file web.php

[](#4-pada-file-webphp)

file `web.php` di direktori root proyek (biasanya di config). Salin dan sesuaikan konfigurasi berikut:

```
'components' => [
        'request' => [
            'enableCookieValidation' => false, // ini di ubah jika true jika tidak ada tambahkan
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '9N95r8jb44okwDNpl6QJ3YUy0vsf9e8M',
        ],
,'as beforeRequest' => [
    'class' => 'yii\filters\AccessControl',
    'rules' => [
        [
            'allow' => true,
            'actions' => ['index'], // Hanya izinkan akses ke halaman index tanpa login
        ],
        [
            'allow' => true,
            'roles' => ['@'],
        ],
    ]]]
```

tambahkan di composer.json:

```
"autoload": {
    "psr-4": {
      "sso_otp_sumut\\jwtauthentication\\": "vendor/sso_otp_sumut/jwt-authentication/src/"
    }
  }
```

jangan lupa dump autoload dengan

```
composer dump-autoload
```

### Struktur Proyek

[](#struktur-proyek)

Berikut adalah struktur proyek secara keseluruhan:

- **/config/params.php**
- **/config/web.php**
- **/controller/siteController.php**
- **vendor\\sso\_otp\_sumut\\jwt-authentication\\src\\JWTAuthenticator.php**

Penggunaan
----------

[](#penggunaan)

### 1. Akses SSOnya

[](#1-akses-ssonya)

Jika token JWT tidak ada atau tidak valid, pengguna akan diarahkan ke halaman login SSO yang ditentukan dalam variabel `LINK_SSO`. buat function `beforeAction` sebelum mengakses ke `action index` pada siteController untuk authentikasinya. contoh aplikasi penggunaan di bawah ini

```
use sso_otp_sumut\jwtauthentication\JWTAuthenticator;

 public function beforeAction($action)
    {
        // Panggil komponen JWTAuthenticator untuk memverifikasi token sebelum aksi dijalankan
        $authenticator = new JWTAuthenticator(); //ini yang dipanggil dari vendor nanti
        $authResult = $authenticator->authenticate();

        // Jika hasilnya berupa redirect, maka proses ini akan menghentikan eksekusi dan redirect.
        if ($authResult) {
            return $authResult;
        }

        return parent::beforeAction($action);
    }

    /**
     * Displays homepage.
     *
     * @return string
     */
    public function actionIndex()
    {
        if (Yii::$app->user->isGuest) {
            return Yii::$app->response->redirect(Yii::$app->params['ssoLoginURL']);
        }
        $model = Satker::find()->all();
        $sql = "SELECT c.kode_satker, e.nama as satker, d.formasi, d.eligible, c.pegawai, (d.eligible - c.pegawai) kurang FROM (SELECT a.kode_satker, count(a.nip_lama) pegawai FROM data_pegawai a WHERE a.aktif='y' GROUP BY a.kode_satker) c, (SELECT b.satker, sum(b.formasi) formasi, sum(eligible) eligible FROM formasi b GROUP BY satker) d, satker e WHERE c.kode_satker=d.satker AND c.kode_satker = e.kode ORDER BY c.kode_satker ASC";
        $rekapPegawai = Yii::$app->db->createCommand($sql)->queryAll();
        return $this->render('index');
        //return $this->redirect(['formasi/terisi']);
    }
```

### 2. Logout

[](#2-logout)

Untuk logout, akses halaman `/logout` yang akan menghapus cookie JWT dan mengarahkan pengguna kembali ke halaman utama atau halaman login.

```
 public $enableCsrfValidation = false;

/**
     * Logout action.
     *
     * @return Response
     */
    public function actionLogout()
    {

       // Mengatur waktu kedaluwarsa cookie JWT ke waktu yang sudah lewat
        Yii::$app->response->cookies->add(new \yii\web\Cookie([
            'name' => 'jwt',
            'value' => '',
            'domain' => 'bps.web.id',
            'expire' => time() - 3600, // Waktu kedaluwarsa sudah lewat
            'secure' => true,
            'httpOnly' => true,
            'sameSite' => 'None',
        ]));

        Yii::$app->user->logout();

        return Yii::$app->response->redirect(Yii::$app->params['ssoLoginURL']);

    }
```

Troubleshooting
---------------

[](#troubleshooting)

### 1. Error Cookie Tidak Tersimpan

[](#1-error-cookie-tidak-tersimpan)

Pastikan bahwa server menggunakan HTTPS dan cookie memiliki opsi `secure: true` agar dapat disimpan di browser.

### 2. Token Tidak Valid

[](#2-token-tidak-valid)

Pastikan token yang diterima benar dan sesuai dengan format yang diharapkan. Token yang dienkripsi harus didekripsi terlebih dahulu sebelum diverifikasi.

### 3. Browser Cache

[](#3-browser-cache)

Jika ada perubahan pada cookie atau token, pastikan untuk membersihkan cache browser untuk memastikan data yang terbaru digunakan.

Kontribusi
----------

[](#kontribusi)

Jika kamu ingin berkontribusi pada proyek ini, silakan fork repository ini dan kirimkan pull request. Pastikan untuk melakukan pengujian yang memadai sebelum mengirimkan kontribusimu.

Lisensi
-------

[](#lisensi)

Proyek ini dilisensikan di bawah [MIT License](https://opensource.org/licenses/MIT).

###  Health Score

16

—

LowBetter than 5% of packages

Maintenance32

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity16

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/b040d023b01e5853635cd3811d0bcc47f96104b4b6124cc0a6492086f0df059c?d=identicon)[restusatrio11](/maintainers/restusatrio11)

---

Top Contributors

[![restusatrio11](https://avatars.githubusercontent.com/u/102730155?v=4)](https://github.com/restusatrio11 "restusatrio11 (13 commits)")

### Embed Badge

![Health badge](/badges/sso-otp-sumut-jwt-authentication/health.svg)

```
[![Health](https://phpackages.com/badges/sso-otp-sumut-jwt-authentication/health.svg)](https://phpackages.com/packages/sso-otp-sumut-jwt-authentication)
```

###  Alternatives

[namshi/jose

JSON Object Signing and Encryption library for PHP.

1.8k99.6M101](/packages/namshi-jose)[league/oauth1-client

OAuth 1.0 Client Library

99698.8M106](/packages/league-oauth1-client)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[gesdinet/jwt-refresh-token-bundle

Implements a refresh token system over Json Web Tokens in Symfony

70516.4M35](/packages/gesdinet-jwt-refresh-token-bundle)[league/oauth2-google

Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client

41721.2M118](/packages/league-oauth2-google)[illuminate/auth

The Illuminate Auth package.

9327.3M1.0k](/packages/illuminate-auth)

PHPackages © 2026

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