❶ 使用thinkphp框架实现单点登录,服务端也要用tp,谁弄过
可以参考各大开源软件的实现模式,如discuz的uc,phpcms的phpsso等
❷ php 单点登录
参考QQ、微信啊,做好各个系统的接口,然后整合
❸ php 怎么实现单点登录
php 单点登录并不复杂。单独登录 (SSO)其实就是让用户通过一次登录访问授权的网络资源。如果是要实现的话,就需要找专业的解决方案了,比如玉符SSO单点登录解决方案。
玉符单点登录的优势主要有:
玉符SSO支持市面上所有标准协议,云服务或者本地部署都搞得定,微软的SAML、谷歌的OIDC,包括CAS、Oauth、JWT等待各种协议都支持
可以提供自研SDK,完美解决自研系统或者没有标准接口应用的问题,只需要十几行代码就可以完成。
玉符单点登录SSO已经实现产品化,交付迅速,时间短,安全性强,单点登录全部通过token令牌实现,不会拿到用户的密码,安全可靠。
希望我的回答对你有帮助。
❹ 详解PHP如何实现单点登录
可以配合session和数据库(或缓存如redis或memcache)实现,具体步骤如下:
在登录成功后保存一个时间戳+随机字符的值,这个值暂时叫sign。把这个值存入数据库(缓存),同时也存入session中。
写一个函数,功能如下:读取数据库(缓存)中的sign,跟session中的sign对比。如不一致,则注销当前session并提示:当前用户已在其他地方登录,你被顶下线。这个函数放到“钩子”里面,实现在每一个操作步骤之前都先调用此函数。
这样,一个简单的单点登录功能就实现了。原理其实很简单,就是每次登录都把数据库(缓存)里面的sign都覆盖一遍,这样当之前登录的人检测到这个sign不一致以后就强制下线。
❺ SSO单点登录的PHP实现方法(Laravel框架)
Laravel是一套简洁、优雅的PHP
Web开发框架(PHP
Web
Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
简单说一下我的逻辑,我也不知道我理解sso对不对。
假如三个站点
a..com
b..com
c..com
a..com
作为验证用户登录账户。
b和c作为客户端(子系统)。
b和c需要登录的时候跳转到a,并且携带参数source指明登陆后跳转的链接。
a站点就是普通的登陆方式(校验用户密码),校验成功后做一些处理。需要生成一个ticket,具体怎么生成都可以,只要安全就可以了。然后存储到Cache里面。这里有疑问,后面总结。登陆成功后直接跳转到\(url就可以了。
```
php
private
function
getTicketUrl(\)source)
{
\(ticket
=
md5(time()+key);
Cache::put(\)ticket,
$user,
120);
$url
=
$source
.
'?ticket='
.
$ticket;
return
$url;
}
假如说a站带着ticket跳转到b站(b..com?ticket=xxxxxxxxxxxxxxxx```)
b站做一个全局的过滤器,接受这个ticket然后请求a站验证ticket是否为a生成的。
b站过滤器App\Http\Middleware\CasAuthenticate代码,这里判断是否有ticket并发送请求到a站校验。如果是登陆的,则拿到用户UID进行登陆。
public
function
handle($request,
Closure
$next)
{
$ticket
=
$request->input('ticket');
if
($ticket)
{
$result
=
json_decode('http://a..com'
.
'/auth/check-ticket?ticket='
.
$ticket),
true);
if
($result['state']
==
"SUCCESS")
{
$request->session()->flush();
Auth::loginUsingId($result['result']['uid']);
return
redirect(redirect()->getUrlGenerator()->current());
}
}
return
$next($request);
}
逻辑算是完成了,但是有几个疑问。
1.我这个实现,我自己都不知道是不是对的,这是我根据原理写出来的。
2.假如b站现在跳转到c站,由于b站活跃比较频繁,session一直都在,而a站的缓存时间极有可能已经过期了,此时从b站跳转到c站,c站跳转到a站去判断登陆,结果发现已经失效了,还是得登陆。所以这是有问题的,由于我们业务模块相关性差,不会随意跳转,所以暂不考虑这样的问题。但这确实是我的一个问题。我没想清楚。
有关SSO单点登录的PHP实现方法(Laravel框架),小编就给大家介绍这么多,希望对大家有所帮助!
❻ PHP 单点登录代码
假设有三个不同域名,a.com, b.com, c.com,将其中之一作为真正的登陆入口,所有的域名下发起的登陆,全部重定向到这个节点,这里假设选择a.com/login.php为统一登入节点,为了方便说明,把a.com叫做主节点,其余叫做从节点。
假设现在从任意站点发出登陆请求,最终都被带到 a.com/login.php?from=b.com&sfkey=xxxxxx,用户输入登陆信息,假设登陆成功,返回一个登陆成功中间页面,在这个页面里,包含下面html代码
<iframe width="0" height="0" src="b.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe>
<iframe width="0" height="0" src="c.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe>
sessid是登陆成功以后的session ID,sfkey是一个安全码,这两个串在login.php里绑定到当前登陆的用户记录上。
这个时候a.com实际已经登陆完毕,获得了PHPSESSID的cookie。两个iframe的作用是把获得的session id立刻同步到从节点上,从节点的sso.php获得sessid和sfkey后,首先校验这个配对是否存在,如果存在,立刻把sessid值设为当前session id
session_id($_GET['sessid']); // 使用a.com产生的session id
session_start();
sso.php请求完毕后,b.com和c.com这两个站点就获得了和a.com一样的PHPSESSID cookie;
这个页面会把用户重定向回所来自的页面(到达login.php的时候记住了),重定向完成后,用户已经在所有网站完成了同步登陆。
a.com发送iframe请求的时候使用加密的sessid=xxxxxx里的sessid,从节点的sso.php获取密文后解密才获得真实的session id
可以用单独域名来作为登陆主节点,比如login.x.com,而不用a b c中的任意一个,login.x.com做且仅作登陆服务。
❼ php 怎么实现单点登录
您好,即插即用方式实现单点登录:
对于 B/S结构应用系统,用户只需通过浏览器界面登录一次,即可通过UTrust SSO单点登录系统访问后台的多个用户权限内的Web应用系统,无需逐一输入用户名、密码登录。对于 C/S结构应用系统,通过IE控件来实现对C/S系统客户端的单点登录,用户输入一次用户名、密码,即可访问所有被授权的C/S系统资源。无论对于B/S和C/S结构的应用系统,实现单点登录的功能时,后台应用系统无需任何修改。•后置代理方式实现单点登录 对于有改造条件的B/S结构应用系统,UTrustSSO也提供了后置代理的方式实现单点登录。SSO 系统提供各种API,Agent代理,对原有应用系统进行改造,改变原有应用系统的认证方式,同时采用认证服务器提供的技术进行一次性身份认证,实现单点登录。