最近公司需要制作单点登录系统,于是我一直在搜寻各种资料寻找最优化的单点登录制作方式,最后综合了各种想法,完成了单点登录系统,下面给大家分享下,我实现的单点登录的方式:
原文转自:http://www.W3PHP.com W3PHP
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。(百度百科)也叫同步登录。
我本人认为单点登录主要解决一下问题:
1. 一个用户账号,多站点通用;
2. 一个应用登录,其他应用同时登录;
3. 一个账号退出,其他应用账号同时退出;(非必须,此项不在单点登录的讨论范围之内,不过WEB单点登录,用到的还是挺多的);
4. 欢迎补充
PHP实现单点登录方法有多种:
1. 通过关系服务 如webservice 之类的;
2. 数据库共享session实现;
4. P3P跨站点 如ucenter phpcms 等;
5. 通过文件操作 SESSIONID
6. 欢迎补充
我使用的是第5种方法,下面简单说下实现:
一 登陆原理说明
我把SSO分为三个角色:
1. 客户端 – 指的是用户的浏览器
2. 代理端 – 指的是用户访问的网站;
3. 服务端 - 单点登录服务端,提供用户信息方;
同域实现SESSION共享非常容易,但是跨域实现网站和单点登录服务器共享SESSION,就需要做些手脚了;我是这样做的:
二. 过程说明:
登陆流程:
1. 第一次登陆某个站:
a) 站点生成随机字符串TOKEN,保存在cookie中,并携带加密过的APPID,APPKEY URL跳转到单点登录服务器;单点登录服务器则解密APPID 和APPKEY并去验证站点合法性;同时单点登录服务端会启动SESSION,并根据TOKEN在单点登录服务端的SESSION生成路径,同时生成以TOKEN为文件名的SESSION_TOKEN,把开始启动SESSION的PHPSSID,写入伪SESSION_TOKEN中,实现SESSION共享,然后使客户端跳转至原来的站点URL;
a) 用户输入用户名+密码,向用户验证中心发送登录请求
b) 当前登录站点,通过CURL请求,用户验证中心验证用户名,密码的合法性。如果验证通过,则返回用户信息,不通过则返回错误信息;
c) 根据上一步的CURL请求返回的结果,当前子站对用户进行登陆处理,如果接受到错误,则进行错误处理;
2. 登陆状态下,用户转到另一子:
a) 通过本站cookie或session验证用户的登录状态:如验证通过,进入正常本站处理程序;不通过则重复第一次登陆步骤;
转自:http://bbs.csdn.net/topics/390620533
--------------------------------
一篇文章:
php如何实现web系统单点登录
1.一级域名相同,通过共享cookie来实现
{
…….//验证用户的合法性
$_SESSION['uid'] = $user_id;
setcookie(‘sign’, encrypt($pass9), ”, ‘/’, ‘the.com’);
}
{
$sign = $_COOKIE['sign'];
if(!empty($sign))
{
$sign = decrypt($sign);
……….///登录成功
}
}
{
$info = callLoginServer(); //访问登录服务器
if(!empty($info)) //登录成功了
}
{
…..//登录成功
}