用PHP实现SSO单点登录系统接入功能与分析

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

简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那实现起来就很方便了。

SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。

比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息:

interface SSOLogin
{
  /**
   * 获取登录用户信息
   * @param $ticket
   * @return mixed
   */
  public function getInfoFromTicket($ticket);
  /**
   * 单点登录授权地址
   * @return mixed
   */
  public function getAuthUrl();
}

再来看看控制器的主要方法,比如回调地址是跳转到控制器 http://www.example.com/sso/check?ticket=xxxx,代码如下

/**
 * 检测是否单点登录
 * @return bool|string
 */
public function actionCheck()
{
  $ticket = Yii::$app->getRequest()->get('ticket');
  if (!$ticket) {
    return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
  }

  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
  if (empty($userInfo['username'])) {
    return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
  }

  $username = $this->getUserName($userInfo['username']);
  $user = User::find()->canLogin()->username($username)->one();

  if (!$user) {
    $newUser = [];
    $newUser['username'] = $userInfo['username'];
    $newUser['email'] = $this->getUserName($userInfo['username']);
    $newUser['role'] = User::ROLE_DEV;
    $newUser['is_email_verified'] = 1;
    $newUser['realname'] = $userInfo['truename'];
    $user = $this->addUser($newUser);
  }

  $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);
  if ($isLogin) {
    $this->redirect('/task/index');
  }

  return true;
}

大概看看这个控制器逻辑就明白了。SSO 接口起到的作用就是获取用户信息,拿这个用户信息跟系统用户表对比,存在用户则进行登录,不存在创建用户并登录。

这是一个内部的单点系统,集成到后台,可能其他的 SSO 跟这不太一样,但基本原理过程差不多。

(0)

相关推荐

  • 认证授权基础

    认证授权基础

  • 单点登录简介

    单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录. 当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对 ...

  • 基于JWT和CAS的SSO单点登录方案

    单点登录是一种比较流行的服务于企业业务整合的一种解决方案.单点登录(SSO:Single Sign On)的意思是:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.比如我们登录淘 ...

  • 八幅漫画理解使用 JWT 设计的单点登录系统

    阅读本文大概需要 6 分钟. JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个场景.在A用户关注了B用 ...

  • spring+springmvc+Interceptor+jwt+redis实现sso单点登录

    在分布式环境中,如何支持PC.APP(ios.android)等多端的会话共享,这也是所有公司都需要的解决方案,用传统的session方式来解决,我想已经out了,我们是否可以找一个通用的方案,比如用 ...

  • 实例讲解如何对智能驾驶系统进行功能安全分析

    随着驾驶员辅助系统的日益复杂,主机厂要发布销售和使用的技术产品,始终必须首先提供足够安全的证明.在这种总体安全考虑中,正确和安全的产品功能部分称为功能安全.评估产品是否安全的参考是容许的风险极限,如果 ...

  • SpringBoot OAuth2 JWT实现单点登录SSO完整教程,竟如此简单优雅!

    作者:狂乱的贵公子 来源:https://www.cnblogs.com/cjsblog/p/10548022.html 1.前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题, ...

  • OAuth2实现单点登录SSO

    OAuth2实现单点登录SSO

  • 登陆成功率 99%,云知声携手平安好医生推声纹登录系统

    近日,语音 AI领军企业云知声宣布,其与中国领先的一站式医疗健康生态平台平安好医生(01833.HK)共同研发的"声纹登录系统"(又称声纹锁)经过多次模型优化和升级迭代后,登录成功 ...

  • 单点登录的三种实现方式

    前言 实现方式一:父域 Cookie 实现方式二:认证中心 实现方式三:LocalStorage 跨域 补充:域名分级 前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登 ...