SSO (Single Sign On)
SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

UCenter 的中文意思就是“用户中心”,其中的 U 代表 User 也代表 You ,取其中的含义就是“用户中心”,或者说“你(最终用户)的中心”。 UCenter 是 Comsenz 旗下各个产品之间信息直接传递的一个桥梁,通过 UCenter 站长可以无缝整合 Comsenz 系列产品,实现用户的一站式注册、登录、退出以及社区其他数据的交互的php框架。

UCenter简介编辑
UCenter 拥有机制完善的接口,经过简单修改便可以挂接其它任何平台的第三方的网络应用程序,随时为您的社区论坛增加能量。
UCenter是今后Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站式注册、登录、退出。UCenter可以让Comsenz旗下所有产品联系得更加紧密,实现用户的统一注册登录,让社区真正运转起来。 UCenter拥有机制完善的接口,经过简单修改便可以挂接其它任何平台的第三方的网络应用程序,随时为您的社区论坛增加能量。UCenter作为信息传统桥梁,拥有统一的短信息、好友机制,最终用户可以通过它轻松通行在各个应用之中,无需重复登录、注册、退出。统一的标签(TAG)机制,将社区中各个应用紧密连接,用户可以在社区里面进行自由穿梭,快速找到所需的应用,获得最佳的使用体验。

康盛公司的UCenter是一款开放软件,主要面向中小站长。

UCenter的功能编辑
提供同步登录、退出、注册等相关接口,可以实现用户一个账号,在一处登录,全站通行。

提供短消息相关接口,可以实现用户在不同应用收发短消息。

提供TAG相关接口,可以实现通过关键词关联各应用的数据,如帖子、商品、视频,使数据多元化。

提供Feed相关接口,可以实现记录用户在各应用的行为,并且在 UCenter Home 等应用显示。

提供好友相关接口,可以实现各应用好友互通。

提供积分策略共享,可以实现各应用设置灵活的积分策略。

提供词语过滤数据共享,可以实现各应用共享 UCenter 的词语过滤数据。

提供MySQL和 HTTP 两种连接用户中心的模式,使之能将 UCenter 和各应用能灵活部署,可以是单台服务器,也可以是局域网、广域网。

通知失败重发机制,为用户中心与各应用交换数据提供更好的保障。

缓存、模板、日志等机制,保障系统在稳定,优化状态下运行。

UCenter运行环境编辑
UCenter 需要服务器上装有如下软件:
◦可用的 http服务器(如 Apache、Zeus、iis等)
◦PHP 4.1.0 及以上
◦MySQL 3.23 及以上
以上软件除了 httpd 软件有可能需要购买以外,其余均为跨平台的免费软件,推荐使用以上软件的最新稳定版本,不仅拥有更多的功能,而且通常已修复了已知老版本的安全漏洞。
您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 UCenter 在内的绝大多数网络软件的正常运行。如果您不了解具体情况,请咨询您的空间提供商。

首先我们先来了解下 Ucenter登录步骤

1、用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证。

2、如果验证成功,将调用位于uc_client下client.php文件中的函数uc_user_synlogin,在这个函数中调用 uc_api_post('user', 'synlogin', array('uid'=>$uid))。

3、然后这个函数后向Ucenter的index.php传递数据,index.php接受传递的数据,获得model为user,action为synlogin的值。

4、然后Ucenter的index.php调用control目录下的user.php类中的onsynlogin方法,通过foreach循环,以javascript的方式通知uc应用列表中开启同步登陆的应用进行同步登录;即通过get方式传递给各个应用目录中api下的uc.php一些数据。

5、uc.php接收通知并处理get过来的数据,并在函数synlogin(位于uc.php中)通过函数_authcode加密数据(默认以UC_KEY作为密钥),用函数_setcookie设置cookie。

6、各个应用用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其它应用登录过,从而让用户可以自动登陆。

应用程序的logging.php ------>uc_client中的client.php------>Ucenter------>应用程序中api/uc.php

其实Ucenter实现同步登陆的原理就是cookie,一个应用登陆成功之后,向Ucenter传递数据,让Ucenter通知其他的应用也设置cookie,这样用户在访问其他应用的时候通过已经设置好的cookie实现自动登陆。了解了Ucenter的同步原理,再遇到无法同步登陆,或者开发一些与UCenter接口的时候就会容易很多。

大致步骤  首先我们要先安装 ucenter 然后把uc_client 这个文件夹复制到自己的项目里面去 然后呢在配置几个文件

client.php相当于函数库

uc.php相当于回调文件

还有一个 config.inc.php 是配置文件

当你有2个应用都设置了同步登陆之后  当你登陆一个应用 然后执行

include './config.inc.php';
include './uc_client/client.php';
$usernames="feiye";
$passwords="789123";
list($uid, $username, $password, $email) = uc_user_login($usernames, $passwords);
if($uid > 0) {
setcookie("username",$username,time()+intval(24*3600));
echo uc_user_synlogin($uid);
echo '登录成功';
} elseif($uid == -1) {
echo '用户不存在,或者被删除';
} elseif($uid == -2) {
echo '密码错';
} else {
echo '未定义';
}

uc_user_synlogin() 这个函数 代表着 要同步登陆到其他所有开启同步登陆的函数  uc自己会在后台把所有开启同步登陆的应用都给循环遍历一遍 然后 在页面上输出  
<script type="text/javascript" src="http://127.0.0.70/api/uc.php?time=1374540644&code=14fdIufn%2B2YwkQlN9P07FEHOfZvDJupvgBgaRPn7R0DJmbEwCb23vKwO1uaeybLq3HZhtokoZrnqu7NGi09jzs684drFCbLDiSpKhk6P50MftBRA3vp4yIswhrPMl1dXo5ajB7CVZ9F8EI%2BkdFfq0E0rdyeRkuz8goeHhg" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.71/api/uc.php?time=1374540644&code=07a91g8SepQwwfA3C1uN1sPhC4v6yuER1jFbVTQMK%2BQZmTkjwOz8X%2B8rWgNmKdhlXe9XXVQqAkDjN26CK6BMA19ZpLoiSW4wuNnxHAB9xXLt2VExuyf03MnEHAC%2BUdjwb58sbXGcYUpM4Bmzdm3Q92ObSp0Kk2qCd12fqg" reload="1"></script>

类似这种的js代码 就是发送给每个开启同步登陆的应用 然后 每个开启同步登陆的应用  的 回调文件 uc.php 接受到后 会进行解密 解密好后 其实 你就可以自己来写代码了  这个uc.php回调文件的代码不一定非要按照他们的格式来写 你也可以自己写你自己的代码  比如说我就是根据session来做同步登陆的
function synlogin($get, $post) {
$uid = $get['uid'];
$username = $get['username'];
if(!API_SYNLOGIN) {
return API_RETURN_FORBIDDEN;
}
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie('gwyy',$username,time()+3600,'/','127.0.0.71');
_setcookie('Example_auth', _authcode($uid."\t".$username, 'ENCODE'));

$_SESSION['username'] = $username;
$_SESSION['uid'] = $uid;
}

function synlogout($get, $post) {
if(!API_SYNLOGOUT) {
return API_RETURN_FORBIDDEN;
}
//note 同步登出 API 接口
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
_setcookie('Example_auth', '', -86400 * 365);
unset($_SESSION['username']);
unset($_SESSION['uid']);
session_destroy();
}

这样 当用户刷新了别的应用页面之后 就自动登陆了

注意 如果在UC里面添加应用 提示通信没有成功 那么原因很简单  就是没有找到你  http://xxxx/api/uc.php  这个文件 只要有这个文件在 那么通信 肯定会成功的

其实UC的原理很简单 就是某个应用登陆后 然后后台轮询发送给同步登陆的应用的回调文件 回调文件接收到用户ID之后 生成cookie或者session然后进入登陆模式。

转载于:https://www.cnblogs.com/meizhoulqp/p/11606333.html

单点登录(SSO) --UCenter技术实现相关推荐

  1. 企业门户应用整合中单点登录(SSO)的技术实现与应用

    企业门户应用整合中单点登录(SSO)的技术实现与应用 相关专题: 电子应用 时间:2009-07-27 09:56来源: icbuy亿芯网 1 引 言 企业在信息化建设过程中,由于经常采用逐步信息化的 ...

  2. jwt单点登录_单点登录SSO技术选型

    一些人存在的意义总归是让另一些人成长,然后消失. --刘同<谁的青春不迷茫> 1.单点登录是什么? 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这 ...

  3. java单点登录跨域_深入浅出让你理解跨域与SSO单点登录原理与技术

    原标题:深入浅出让你理解跨域与SSO单点登录原理与技术 一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互 ...

  4. OAuth2 实现单点登录 SSO

    转载自  OAuth2 实现单点登录 SSO 1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,"一看就会,一做就错".网上关于实现SSO的文章一大堆 ...

  5. 单点登录 cas 设置回调地址_单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?...

    实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效 性,因此要点也就以下两个:1.存储信任 :2.服务器生产~验证信任 : 3.拿到服务器再次验证. 单点登录的常 ...

  6. 多域单点登录SSO系统的实现

    多域单点登录SSO系统的实现 天幻网新的规划中,将涉及到多域,如FFSKY.COM,FFSKY.CN等等,因此网上某些对同一域靠设置COOKIE的DOMAIN=".FFSKY.COM&quo ...

  7. OAuth2实现单点登录SSO

    本文转载自:https://www.cnblogs.com/cjsblog/p/10548022.html OAuth2实现单点登录SSO 1.  前言 技术这东西吧,看别人写的好像很简单似的,到自己 ...

  8. 单点登录SSO的实现原理

    单点登录SSO的实现原理 单系统登录机制 浏览器第一个请求服务器,服务器会创建一个会话,并将会话的ID作为响应的一部分发送给浏览器,浏览器存储会话ID,并在后续的请求中带上会话ID,服务器取得请求中的 ...

  9. 基于.Net的单点登录(SSO)解决方案

    基于.Net的单点登录(SSO)解决方案 前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助. ...

  10. PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...

    如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: 使用Memcached来共享PHP Session: 使用Cohere ...

最新文章

  1. js去掉前后空格的函数_2020年最火爆的Vue.js面试题
  2. 企业邮箱自建战略优势大盘点
  3. 5、ORDER BY:对查询结果排序
  4. 标准I/O小程序-文件拷贝
  5. 计算机系统的优化项目,计算机系统项目集成管理问题与对策
  6. unity3d中串口的使用
  7. MySQL数据库的恢复-mysql数据库的恢复
  8. MATLAB利用ode求解二阶微分方程
  9. 德国人的数学题375=1
  10. 数据库系统概论-数据库系统阶段的特点
  11. 和你走在南京种满梧桐的大街小巷
  12. 计算机主机电源连接,七个步骤教你主机电源如何接线
  13. 2022年软件测试——精选金融银行面试真题
  14. czl蒻蒟的OI之路2
  15. 同步下的资源互斥:停运保护(Run-Down Protection)机制
  16. 本地部署你的专属ChatGPT,不用想方设法翻墙了
  17. 关于jQuery(二)
  18. Logstash同步数据
  19. 不学编程都能看懂的@Transactional()事务
  20. python 笔记--同时输入两个数字

热门文章

  1. (转)2007北京高考作文题目(太有才了.我都看了无数遍了)
  2. 用C语言实现推箱子小游戏基础程序
  3. 什么是单页网站设计?受欢迎的原因在哪?
  4. 题目0073-双十一
  5. 基于JAVA实现的图形化页面置换算法
  6. 【盘点】2017杭州云栖大会迁云实战Workshop
  7. NIVIDIA 硬解码学习2
  8. 2. 确定地球与金星之间的距离 天文学家在1914年8月份的7次观测中,测得地球与金星之间距离(单位:米),并取其常用对数值,与日期的一组历史数据如下表:
  9. handsome主题添加服务器信息,全屏响应式精美typecho主题handsome
  10. 管理计算机(域)的内置账户名称,管理active directory中用户和计算机账户