Cara mengintegrasikan autentifikasi Jasig CAS dengan Yii2, pertama-tama install terlebih dahulu library jasig/phpcas menggunakan composer

composer require jasig/phpcas:"*"

Buat model untuk autentifikasi pengguna, misal CasAuth.php

use yii\base\Model;
use Yii;

class CasAuth extends Model
{
    public $username;

    private $_user = false;

    /**
     * Finds user by [[username]]
     *
     * @return Admin|null
     */
    public function getAdmin()
    {
        if ($this->_user === false) {
            $this->_user = Admin::findByUsername(trim(strtolower($this->username)));
        }

        return $this->_user;
    }

    public function loginAdmin()
    {
        $duration = 60*20;
        if ($this->username) {
            $user = $this->getAdmin();
            if ($user) {
                $user->last_login_time = date('Y-m-d H:i:s', time());
                $user->login_ip = Yii::$app->request->getUserIP();
                $user->update();
                return Yii::$app->user->login($this->getAdmin(),$duration);
            } else {
                return false;
            }

        } else {
            return false;
        }
    }
}

Pada baris ke-18 Admin::findByUsername(trim(strtolower($this->username))) adalah pemanggilan terhadap fungsi findByUsername dari model Admin. Fungsi ini akan mengembalikan satu record data Admin berdasarkan username. Model Admin selain extends ActiveRecord juga harus implements IdentityInterface.

use Yii;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class Admin extends ActiveRecord implements IdentityInterface
{
    const STATUS_DELETED = 0;
    const STATUS_ACTIVE = 10;
    ...
    /**
     * Finds user by username
     *
     * @param string $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
    }

    ...
}

Buat actionLogin pada file SiteController.php jadi seperti dibawah ini:

    public function actionLogin()
    {
        \phpCAS::client(CAS_VERSION_2_0, Yii::$app->params['casHost'] , Yii::$app->params['casPort'], Yii::$app->params['casContext']);

        \phpCAS::setNoCasServerValidation();
        \phpCAS::handleLogoutRequests(false);
        \phpCAS::forceAuthentication();

        $username = \phpCAS::getUser();

        $model = new CasAuth(['username'=>$username]);
        if ($model->loginAdmin()) {
            return $this->goHome();
        } else {
            if ($model) {
                $service = strval(Yii::$app->request->hostInfo.'/site');
                \phpCAS::logout(array('service'=>$service));
            }
            return $this->redirect('/site');
        }
    }

    public function actionLogout()
    {
        \phpCAS::client(CAS_VERSION_2_0, Yii::$app->params['casHost'], Yii::$app->params['casPort'], Yii::$app->params['casContext']);

        $service = strval(Yii::$app->request->hostInfo.'/site/logout-cas');
        \phpCAS::logout(array('service'=>$service));
    }

    public function actionLogoutCas()
    {
        Yii::$app->user->logout();

        return $this->goHome();
    }

Perhatikan baris ke-3 Yii::$app->params['casHost'], Yii::$app->params['casPort'], dan Yii::$app->params['casContext'] adalah konfigurasi server CAS yang telah disimpan di file config\params-local.php. Lihat di bawah ini

return [
    'casHost' => "sso.domain.com", // host CAS
    'casPort' => 443, // port CAS
    'casContext' => "",
    ....
];

Kembali ke fungsi actionLogin, pada baris ke-7 adalah fungsi untuk melakukan autentifikasi SSO ke server CAS, kemudian saat autentifikasi berhasil pada baris ke-9 username CAS disimpan ke variabel $username. Selanjutnya buat instance model CasAuth dengan inisialisasi username menggunakan variabel $username(baris ke-11).

Pada baris ke-12 lakukan pengecekan, apakah pengguna dengan username tersebut ada di dalam record data Admin.

Baris ke-17 cukup penting, karena bisa jadi pengguna dapat melakukan autentifikasi di sistem CAS tetapi tidak termasuk sebagai Admin. Untuk kasus seperti itu maka akan lebih baik jika pengguna tersebut dilogout sesionnya dari sistem CAS.