SSO即單點(diǎn)登錄,百度有很多專業(yè)的講解和理論知識(shí)。本文以簡(jiǎn)化的PHP代碼案例來(lái)讓大家拋開理念,更簡(jiǎn)單認(rèn)識(shí)SSO的應(yīng)用,最好能展開自己的理解。
我這邊簡(jiǎn)單配置了3個(gè)域名及對(duì)應(yīng)的文件夾
├─A 文件夾 a.com 應(yīng)用系統(tǒng)
│ ├─index.php
│ └─login.php
│
├─B 文件夾 b.com 應(yīng)用系統(tǒng)
│ ├─index.php
│ └─login.php
│
├─C 文件夾 c.com 登錄系統(tǒng)
│ └─login.php
A和B都是業(yè)務(wù)系統(tǒng),C是專門用來(lái)登錄的系統(tǒng),都不在一個(gè)域。
當(dāng)然,這里把它們抽離開來(lái)只是簡(jiǎn)化抽象便于理解。
下面看下 A 服務(wù)器的文件(服務(wù)器B僅uri與A不同):
-------------------------------------index.php-------------------------------------
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1><?= isset($_COOKIE['userInfo'])?$_COOKIE['userInfo']:'----' ?></h1>
<a href="login.php">登錄</a>
</body>
</html>
-------------------------------------login.php-------------------------------------
<?php
// 已在本站登錄,直接返回
if (isset($_COOKIE['userInfo'])) {
echo '<script> location = "/"</script>';
die;
}
// 由登陸中心登錄成功返回過(guò)來(lái)的,處理并返回用戶操作
if (isset($_GET['action']) && $_GET['action'] == 'sso') {
setcookie('userInfo',$_GET['userInfo']);
echo '<script> location = "/"</script>';
die;
}
// 未登錄,跳轉(zhuǎn)至登陸中心
if (!isset($_COOKIE['userInfo'])) {
header('Location: http://c.com/login.php?uri=a.com');
die;
}
下面看下登錄系統(tǒng) C 的代碼:
-------------------------------------login.php-------------------------------------
<?php
//已在登陸中心登錄,直接返回登錄站點(diǎn)
if (isset($_COOKIE['userInfo'])) {
header('Location: http://'.$_GET['uri'].'/login.php?action=sso&userInfo='.$_COOKIE['userInfo']);
die;
}
//登錄處理并返回
if (isset($_POST['userInfo'])) {
setcookie('userInfo',$_POST['userInfo']);
header('Location: http://'.$_GET['uri'].'/login.php?action=sso&userInfo='.$_POST['userInfo']);
die;
}
?>
<!-- 未登錄時(shí),登錄表單 -->
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="login.php?uri=<?= $_GET['uri'] ?>" method="post">
姓名:<input type="text" name="userInfo">
<button>登錄</button>
</form>
</body>
</html>
以上就是一個(gè)簡(jiǎn)單的SSO單點(diǎn)登錄系統(tǒng)方案。當(dāng)然實(shí)際應(yīng)用中,會(huì)有redis...來(lái)存儲(chǔ)公共的登錄數(shù)據(jù),每個(gè)業(yè)務(wù)系統(tǒng)會(huì)有自己的權(quán)限驗(yàn)證。