最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SSO单点登录系统接入的例子
时间:2022-06-24 17:45:35 编辑:袖梨 来源:一聚教程网
简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了。
SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。
比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息:
PHP
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('点击登录单点登录系统', SSOlogin::getInstance()->getAuthUrl()));
}
$userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
if (empty($userInfo['username'])) {
return $this->renderAuthError('请先授权', sprintf('点击登录单点登录系统', 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 跟这不太一样,但基本原理过程差不多。
相关文章
- aave交易所 04-20
- BTCC交易平台 04-20
- aave交易所官网 04-20
- btc挖矿软件下载官网 04-20
- 金铲铲之战s7风暴驯龙法阵容推荐-金铲铲之战s7巨龙之巢熬兴怎么玩 04-20
- 《星球工匠》电路板获得方法 04-19