bantenprov / laravel-sso-client
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2022-02-01 13:11:05 UTC
README
本包用于一些应用的开发过程,这些应用是为北罗省政府服务的,其中一些应用的概念是使用单点登录(集中认证)。
文档
在使用此包之前,有一些需要注意的事项,甚至需要特别注意,因为如果发生错误或缺少特定规格,可能会导致一些功能无法正常工作。
注意
- 本包中开发的单点登录概念是通过使用http请求和单个域profile作为服务器来实现的,该服务器作为客户端工作,并通过cas服务器对其进行唤醒。
- Sso包根据ip地址和本地ip地址检测客户端,因此当有客户端使用sso并在另一个标签页中打开另一个sso应用时,此包将自动进行注册和登录。
- BantenprovSso包仅与advancetrus或laratrus包以及laravel的内置auth包兼容,与其他认证包不兼容。本包仅在Firefox和Chrome浏览器上运行良好。
- 请与同事一起阅读和运行此文档,以确保包的实施过程顺利进行。
应用程序演示
请在本省profilename应用中注册您的帐户 http://profil-01.dev.bantenprov.go.id/
然后在此应用中进行登录
-
单点登录客户端应用二 http://client_dua.bangunbanten.com/login
安装包
// 运行以下composer命令以在您的项目中安装包
composer require Bantenprov/BantenprovSso : dev-master
在.env文件中添加配置文件
在.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
注册应用程序并获取应用程序令牌
appid和token是应用程序的凭据密钥,以便应用程序可以请求bantenprov sso服务器以进行应用程序注册。请参阅http://profil-01.dev.bantenprov.go.id/页面,并进入开发者页面,在那里注册您的应用程序。您将立即收到应用程序的appid和token。
更新Config/app.php文件
将以下几行代码添加到文件 config/app.php 中
Bantenprov\BantenprovSso\BantenprovSsoServiceProvider::class,
运行 Artisan 命令
在您的终端中运行以下命令以发布一些路由、控制器和 JS 资产文件
composer dump-autoload
php artisan vendor:publish
php artisan bantenprov-sso:add-route
添加 meta 代码
将以下 meta 代码和 JavaScript 添加到登录页面或默认用户页面,当用户未登录时
<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>
在您的某些文件中包含 .js 数据
除了使用一些 PHP 模块外,BantenprovSso 包还非常需要一些 JavaScript 脚本来运行其核心模块。因此,将这些脚本添加到您的登录文件或用户未登录时的默认文件中
<script type="text/javascript" src="{{ asset('js/init_ipaddress.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/check_login.js') }}"></script>
还有一件重要的事情,请将此元素添加到您的登录表单中
为了抓取客户系统的 IP 地址,系统需要通过输入页面发送 IP 数据,然后将其存储到 SSO 服务器,并作为来自其他应用的下次登录的键来检测
将其添加到登录页面的顶部文件中
<?php
use Bantenprov\BantenprovSso\BantenprovSso as BantenprovSso;
?>
接下来,将以下脚本添加到您的登录表单中。这样,这些元素将与客户凭据数据一起发布
<div class="hide">
<input type="text" class="ip2" name="ip2" value="{{BantenprovSso::InitAddress()}}">
<input type="text" name="ip1" class="ip1" id="list"/>
</div>
更新用于 action 登录表单的应用程序控制器方法
实际上,使用此 SSO 包是通过将现有凭据数据与提供的 SSO 服务器上的凭据数据相乘来实现的。因此,对于开发的自适应信任方法,有一些处理身份验证过程的更改,以下是一个已经使用 bantenprovSso 进行身份验证的示例方法
<?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();
}
}
提示:请仔细阅读并运行此文档,以确保实施过程顺利进行。
快乐编码
祝您尝试成功
注意
- 本包仍在开发阶段,如果出现错误或其他数据缺失,请告知。开发者可以通过 085711511295 联系或通过 ahmadorin@gmail.com 发送电子邮件