bantenprov / bantenprov-sso
基于Laravel框架的SSO客户端
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-28 02:51:52 UTC
README
本包用于Banten省一些应用的开发过程,其中要构建的应用概念是使用单点登录(集中认证)。
文档
在使用本包之前,有一些事项需要注意,甚至要非常注意,因为如果出现错误或规格不明确,这可能会导致一些功能无法正常工作
注意
- 本包中开发的单点登录概念包括使用http请求,一个域名为profile的服务器作为客户端服务器,并使用cas服务器来触发。
- Sso包通过IP地址和本地IP地址检测客户端,因此当有客户端使用SSO并在另一个标签页中打开另一个SSO应用时,本包将自动进行注册和登录。
- BantenprovSso包仅与
advancetrus
或laratrus
包以及Laravel自带的auth
包兼容,与其他认证包不兼容。本包仅能在Firefox和Chrome浏览器上良好运行。- 请与大家一起阅读并遵循此文档,以确保包的实施过程顺利。
应用程序演示
请在bantenprov profile应用程序中注册您的账户 http://profil-01.dev.bantenprov.go.id/
然后在此应用程序中登录
安装包
// 运行以下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
注册应用程序并获取您的app token
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数据
BantenprovSso包除了使用一些PHP模块外,还需要一些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>
更新用于登录表单操作的控制器方法
实际上,使用此SSO包是通过向已提供的SSO服务器查询凭据数据来加倍现有凭据数据的。因此,对于Adavatrust开发的方法,有一些用于处理认证过程的数据处理更改。以下是一个使用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联系。