Skip to content

SSO Client for application using laravel as framework

License

Notifications You must be signed in to change notification settings

bantenprov/bantenprov-sso

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Welcome to BantenprovSso!

Scrutinizer Code Quality Build Status

Package ini adalah pakage yang di gunakan untuk proses development di beberapa aplikasi untuk kepetingan pemeritan provinsi banten, dimana konsep dari beberapa aplikasi yang akan di bangun adalah menggunakan single sign on (authentikasi terpusat).


Documents

Baik sebelum menggunakan package ini ada beberapa yang harus di perhatikan dan bahkan harus sangat di perhatikan karena jika terjadi kesalahan atau kekurangan spesifkasi yang di minta hal ini bisa menimbulkan beberapa fiture tidak bisa berjalan dengan normal

Note:

  • Konsep single sign on yang di kembangkan dalam package ini ada lah single singn on dengan mengunakan http request dengan satu domain profile yang bekerja sebagai server untuk client dan menyabukannya dengan server cas.
  • Package Sso memdeteksi client berdasarkan ip address dan local ip address, sehingga ketika ada client yang menggunakan sso dan di tab lain memanggi aplikasi sso lainnya maka package ini akan melakukan registrasi dan login secara otomatis.
  • Package BantenprovSso hanya compatibel dengan package advancetrus atau laratrus dan package auth bawaan laravel dan tidak compatible ke package authentikasi yang lainnya. Package ini HANYA bisa beroperasi dengan baik pada browser Firefox dan Chrome.
  • Harap baca dan jalan dokumentasi ini dengan sesama agar proses penerapan package bisa berjalan dengan baik.

Demo Aplikasi

silahkan daftarkan accout anda di aplikasi bantenprov profile http://profil-01.dev.bantenprov.go.id/

kemudia lakukan login di aplikasi ini

  1. aplikasi client sso satu http://client_satu.bangunbanten.com/login

  2. Aplikasi client sso dua http://client_dua.bangunbanten.com/login

Install Pacakge

// jalankan perintah composer ini untuk menginsatall package pada project anda

composer require Bantenprov/BantenprovSso : dev-master

tambahkan file config di .env

Tambahkan beberapa baris code berikut pada file .env

APPID=YOUR_APP_ID
TOKEN=YOUR_TOKEN
SSO_LOGIN=http://profil-01.dev.bantenprov.go.id/cas/v1/login
CHECK_LOGIN=http://profil-01.dev.bantenprov.go.id/cas/v1/check_login
CHECK_LOGOUT=http://profil-01.dev.bantenprov.go.id/cas/v1/check_logout
SSO_LOGOUT=http://profil-01.dev.bantenprov.go.id/cas/v1/logout

Registrasi Applikasi dan dapatkan app token anda

appid dan token adalah creadential key untuk aplikasi anda supaya bisa melakukan request ke bantenprov sso server untuk melakukan registrasi apps anda silahkan ada daftar di halaman http://profil-01.dev.bantenprov.go.id/ dan masuk ke page developer page dan daftarkan aplikasi anda disana maka anda akan segera mendapaktan appid dan token untuk aplikasi anda.

Update file Config/app.php

Tambahkan beberapa baris code berikut pada file config/app.php

Bantenprov\BantenprovSso\BantenprovSsoServiceProvider::class,

jalankan Perintah Artisan

jalankan perinta berikut pada teriminal anda untuk mempulish beberapa rote, controller dan js assest file

composer dump-autoload
php artisan vendor:publish
php artisan bantenprov-sso:add-route

Tambahkan code meta

Tambahkan code meta dan javascript berikut pada halaman login atau halaman yang ada angga sebagai default page user ketika user dalam keadaan tidak login atau page yang berisi login form

  <meta name="ipaddress" id="locale" content="{{Session::get('ipaddress')}}" />
  <meta name="check_logout_url" id="locale" content="{{'cas/check_logout'}}" />
  <meta name="check_login_url" id="locale" content="{{'cas/check_login'}}" />
  <meta name="_token" id="locale" content="{{csrf_token()}}" />
  <meta name="logout_url" id="locale" content="{{url('logout')}}" />
  <meta name="auth_check" id="locale" content="{{(Auth::Check())?'1':'0'}}" />
  <meta name="current_url" id="locale" content="{{Request::fullUrl()}}" />
  <meta name="auth_page" id="locale" content="{{url('dashboard')}}" />

  <script type="text/javascript">
    var init_address = '{{ BantenprovSso::InitAddress() }}';
    //alert(init_address);
  </script>

Include Data .js pada beberapa file anda.

Package BantenprovSso ini selain menggunakan beberapa module php juga sangat membutuhkan beberapa script javascript untuk menjalankan beberapa core modulenya. jadi tambahkan script ini pada file login anda atau file default ketika user tidak login

<script type="text/javascript" src="{{ asset('js/init_ipaddress.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/check_login.js') }}"></script>

Satu hal penting lagi, tambahkan element ini pada form login anda

untuk menggrab data ip address customer sistem perlu mengirim data ip via input page, yang nantinya akan di store ke sso server dan di detect sebagai key untuk next login dari aplikasi lain,

tambahkan ini pada top file login page anda.

<?php 
use Bantenprov\BantenprovSso\BantenprovSso as BantenprovSso;
?>

berikutnya tambahkan script berikut pada form login anda. sehingga element ini akan di post bersamaan dengan post credential data customer.

<div class="hide">
<input type="text" class="ip2" name="ip2" value="{{BantenprovSso::InitAddress()}}">
<input type="text" name="ip1" class="ip1" id="list"/>
</div>

Update method controller aplikasi anda yang di ginakan untuk action login form

pada dasarnya penggunakaan package sso ini adalah mengalikan data credetial yang ada buat dengan menanyakan data credentialnya ke server sso yang telah di sediakan. jadi untuk metode adavatrust yang develop ada beberapa perubahan untuk handling proses data authentikasi berikut contoh methode yang telah menggukanan bantenprovSso untuk authentikasi

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth, Redirect, Validator;
use App\User;
use Hash, Session;
use Bantenprov\BantenprovSso\BantenprovSso as BantenprovSso;


class DevelController extends Controller
{
    public function login()
    {
        if(!Auth::check())
        {
            return view('pages.credential.login');
        }
        return Redirect::to('dashboard');
    }

    public function post_login(Request $request)
    {
        $validator = Validator::make($request->all(), 
            [
                'email'         => 'required|email',
                'password'      => 'required'
            ]);

        if($validator->fails())
        {
            Session::flash('message', 'Data tidak boleh kosong');
            return redirect()->back()
                ->withErrors($validator)
                ->withInput();
        }
        $credential = [
        'email'         => $request->input('email'), 
        'password'      => $request->input('password'),
        'ipaddress'     => $request->input('ip1').'-'.$request->input('ip2')
        ];

        //set session 
        Session(['ipaddress' => $request->input('ip1').'-'.$request->input('ip2')]);

        if(!BantenprovSso::Attempt($credential))
        {
            //dd(BantenprovSso::message());
            Session::flash('message', 'terjadi kesalah, login tidak berhasil');
            return redirect()->back()
                ->withErrors(BantenprovSso::message())
                ->withInput();
        }
        //dd(BantenprovSso::data());
        $data = BantenprovSso::data();
        //check data user pada table user 
        $user = User::where('email', $data->email)
                ->first();
        if(count($user) == 0)
        {
            //return 'gak ada';
            //insert data user
            $create_user = new User;
            $create_user->email         = $data->email;
            $create_user->name          = $data->name;
            $create_user->password      = $data->password;
            $create_user->save();

            return Self::init_login($create_user);
        }
        else
        {
            return Self::init_login($user);
        }

    }

    public function init_login($data)
    {
        //login with id
        //dd($data->id);
        if(Auth::loginUsingId($data->id))
        {
            return redirect::to('dashboard');

        }
        else
        {
            //false
            return Redirect::to('login');
        }

    }

    public function check_logout(Request $request)
    {
        if(BantenprovSso::check_logout(['ipaddress' => $request->input('ipaddress')]))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }

    public function check_login(Request $request)
    {
        $check = BantenprovSso::check_login(['ipaddress' => $request->input('ipaddress')]);
        if(!$check)
        {
            return 0;
        }
        else
        {
            // cari atau simpan data baru
            $teng = BantenprovSso::check_login_data();
            $user_data = User::where('email', $teng->email)->first();
            if(count($user_data) == 0)
            {
                //simpan data baru
                $simpan = new User;
                $simpan->email          = $teng->email;
                $simpan->name           = $teng->name;
                $simpan->password       = 'bantenprov';
                $simpan->save();

                Auth::loginUsingId($simpan->id);
                return 1;
            }
            else
            {
                Auth::loginUsingId($user_data->id);
                return 1;
            }
        }
    }

    public function cas_logout()
    {
        Auth::logout();
        Session()->forget('ipaddress');
        return 1;
    }

    public function logout()
    {
        Auth::logout();
        BantenprovSso::Logout(['ipaddress' => Session::get('ipaddress')]);
        Session()->forget('ipaddress');
        return Redirect::to('/login');
    }

    public function test()
    {
        return BantenprovSso::init();
    }
}

Tip: Mohon baca dan jalankan dokumentasi ini dengan baik dan benar agar proses impementasi berjalan dengan sempurna.


Happy Coding

Selamat mencoba semoga berhasil

Note:

  • Package ini masih dalam tahap pengembagan, mohon infonya jika tejadi bug atau kekurangan data lain. Pengembang bisa di hubungi di 085711511295 atau drop email ke [email protected]

Support StackEdit

About

SSO Client for application using laravel as framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published