美文网首页
简单理解SSO单点登录之代码实践

简单理解SSO单点登录之代码实践

作者: 许文同学 | 来源:发表于2018-03-12 16:10 被阅读0次

    SSO即单点登录,百度有很多专业的讲解和理论知识。本文以简化的PHP代码案例来让大家抛开理念,更简单认识SSO的应用,最好能展开自己的理解。
    我这边简单配置了3个域名及对应的文件夹

    ├─A 文件夹               a.com  应用系统
    │  ├─index.php   
    │  └─login.php
    │
    ├─B 文件夹               b.com  应用系统
    │  ├─index.php
    │  └─login.php
    │
    ├─C 文件夹               c.com  登录系统
    │  └─login.php
    

    A和B都是业务系统,C是专门用来登录的系统,都不在一个域。
    当然,这里把它们抽离开来只是简化抽象便于理解。
    下面看下 A 服务器的文件(服务器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;
    }
    // 由登陆中心登录成功返回过来的,处理并返回用户操作
    if (isset($_GET['action']) && $_GET['action'] == 'sso') {
        setcookie('userInfo',$_GET['userInfo']);
        echo '<script> location = "/"</script>';
        die;
    }
    // 未登录,跳转至登陆中心
    if (!isset($_COOKIE['userInfo'])) {
        header('Location: http://c.com/login.php?uri=a.com');
        die;
    }
    

    下面看下登录系统 C 的代码:

    -------------------------------------login.php-------------------------------------
    <?php
    //已在登陆中心登录,直接返回登录站点
    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;
    }
    ?>
    <!-- 未登录时,登录表单 -->
    <!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>
    

    以上就是一个简单的SSO单点登录系统方案。当然实际应用中,会有redis...来存储公共的登录数据,每个业务系统会有自己的权限验证。

    相关文章

      网友评论

          本文标题:简单理解SSO单点登录之代码实践

          本文链接:https://www.haomeiwen.com/subject/fvwnfftx.html