QQ扫一扫联系
用户SSO客户端提供了内置的 SSO 默认可以和其他 ModStart 系统无缝对接,可以方便的和其他系统完成账号打通。
如果需要和自己的系统完成账户打通,只需要按照如下步骤进行简单开发即可。
功能设置 → 用户设置 → SSO客户端 → 打开禁止注册
这样避免在当前系统用户新注册后数据错乱。
安装模块 https://modstart.com/m/MemberSSOClient
功能设置 → 用户设置 → SSO客户端
- 秘钥随机生成
- SSO服务端地址请填写您的第三方登录处理地址
跳转时会携带如下参数:
client
:当前系统的地址和SSO返回地址,如 http://cms.com/sso/clienttimestamp
: 当前时间戳,单位秒,如 1639645067sign
: 签名,如 efee214f978620d66ed78f200af620a8
签名计算方式:
md5( md5(SSO服务端秘钥) . md5($timestamp) . md5($client) )
第三方系统登录逻辑参考
public function ssoLoginProcess()
{
// 在第三方系统登录成功后跳转的地址,第3步跳转时会携带该参数
// 注意这里要检查登录来源,比如检查 ¥client=='http://xxx.com/sso/client' 避免非法链接骗取登录信息
$client = Input::get('client');
// SSO服务端秘钥,需要和第2步中的配置相同
$ssoClientSecret = 'tr5wQmL73I5x0QKwqwGaxrlTH2ptrUXo';
// SSO服务端地址,需要和第2步中的配置相同
$server = 'http://cms.demo.soft.host/xxxx';
// 其他处理,可以检查签名是否正确
$sign = Input::get('sign');
$isLogin = true;
if (!$isLogin) {
// 如果用户未登录,处理登录逻辑
// 比如,展示展示登录界面,或者跳转到该系统的登录页面
echo "模拟登录";
} else {
// 如果用户登录成功,跳转回ModStart系统
$username = '登录成功的用户名';
$timestamp = time();
$sign = md5(md5($ssoClientSecret) . md5($timestamp . '') . md5($server) . md5($username));
$redirectUrl = $client . '?' . http_build_query([
'server' => $server,
'timestamp' => $timestamp,
'sign' => $sign,
'username' => base64_encode($username),
]);
return Response::redirect($redirectUrl);
}
}