• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP编程 SSO详细介绍及实例

php 搞代码 3年前 (2022-01-22) 26次浏览 已收录 0个评论

这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下

PHP SSO详解

SSO有三种模式:①跨子域单点登陆②完全跨单点域登陆③站群共享身份认证

第一种模式很简单,只需要将Cookie的域设置成多个应用的根域即可

第二种方式,也很简单,就是将所以应用的认证地址更换成同一个认证地址,每次查看是否在认证中心登陆,如果登陆了,给调用应用发放一个加密令牌即可

第三种跨域,就是来回跳转来回验证token略有麻烦

配置目录结构

在服务器根目录下,新建三个项目目录:

|–/网站根目录/
|–|–/oa/
|–|–/bbs/
|–|–/blog/

在根目录下新建functions.PHP脚本文件,具体内容如下:

<?php/** * 获取登陆token * @param string $url 获取token的地址 * 2017-01-03T13:08:43+0800 */function getToken($url){  $bool = isLogin();  if ($bool) {    // 如果登陆了跳转到本站首页    header('location: index.php');    exit();  }  // 否则没有登陆,去另一个站点看是否登陆  header('location: '.$url);}// 校验令牌是否正确function yzToken($domain){  $url = isset($_GET['url']) ? $_GET['url'] : '';  $username = isset($_GET['username']) ? $_GET['username'] : '';  $token = isset($_GET['token']) ? $_GET['token'] : '';  if (!empty($username) && !empty($token)) {    $salt = 'taoip';    $_token = md5($salt.$username);    // 校验第三方站点过来时的token是否正确    if ($_token == $token) {      // 设置跳转过来的网站的Cookie      setCook($username, $_token, $domain);      header('location: index.php');    }  }}// 设置cookiefunction setCook($username, $_password, $domain){  // 校验成功,开始登陆  setcookie('username', $username, time()+3600, '/', $domain);  setcookie('token', $_password, time()+3600, '/', $domain);  header('location: index.php');}// 判断是否登陆function isLogin(){  $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';  $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';  $salt = 'taoip';  $_token = md5($salt.$username);  if ($token == $_token) {    return true;  } else {    return false;  }}?>

在oa项目目录下,新建index.php和login.php两个脚本文件

编辑index.php文件

<?php// OA站点// (1)开启Session会话session_name('taoip');session_start();// (2)获取用户名和token进行校验$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';$token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';$salt = 'taoip';$_token = md5($salt.$username);if ($token != $_token) {  header('location: login.php');  exit();}echo "欢迎{$username}用户,访问OA站点";?>

编辑login.php文件

<?php// OA站点登陆系统require '../functions.php';// (2)验证yzToken('taoip.cn');// (1)判断是否登陆,登陆则跳转首页,未登录则去其他站点获取token$url = isset($_GET['url']) ? $_GET['url'] : '';if (empty($url)) {  getToken('http://dengpeng.cc/login.php?url=http://oa.taoip.cn/login.php');}// (1)判断用户是否登陆$bool = isLogin();$url = isset($_GET['url']) ? $_GET['url'] : '';if ($bool) {  if (empty($url)) {    header('location: index.php');  } else {    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';    $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';    $lurl = $url.'?username='.$username.'&token='.$token;    header('location: '.$lurl);  }}if (!empty($_POST)) {  $username = isset($_POST['username']) ? $_POST['username'] : '';  $password = isset($_POST['password']) ? $_POST['password'] : '';  // 从库中查询用户密码  @$link = mysql_connect('localhost', 'root', '');  mysql_query('use sso', $link);  mysql_query('set names utf8', $link);  $sql = "select * from users where username = '".$username."'";  $user = mysql_fetch_assoc(mysql_query($sql, $link));  // 校验  $salt = 'taoip';  $_password = md5($salt.$username);  // var_dump($user['password'] == $_password);  // print_r($user);exit();  if ($user['password'] ==<mark>6来源gaodaimacom搞#^代%!码网</mark><strong>搞gaodaima代码</strong> $_password) {    // 校验成功,开始登陆    setcookie('username', $username, time()+3600, '/', 'taoip.cn');    setcookie('token', $_password, time()+3600, '/', 'taoip.cn');    // 如果URL没有值重定向到首页,否则重定向到URL页面    if (empty($url)) {      header('location: index.php');    } else {      header('location: '.$lurl);    }  }}?><!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="generator" content="Sublime Text 3114">  <meta name="author" content="[email protected]">  <meta name="keywords" content="">  <meta name="description" content="">  <title>OA站点登陆系统</title></head><body>  <p class="container">    <h2>oa.taoip.cn站点登陆系统</h2>    <form action="" method="post">      <label for="">用户名</label>      <input type="text" name="username">      <br>      <label for="">密码</label>      <input type="text" name="password">      <hr>      <button type="submit">提交</button>    </form>  </p></body></html>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP编程 SSO详细介绍及实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址