本人目前嘗試把個(gè)人網(wǎng)站導(dǎo)航(www.dingstudio.cn)、個(gè)人的博客網(wǎng)站(blog.dingstudio.cn)、相冊(cè)管理系統(tǒng)(album.dingstudio.cn)、心情語錄發(fā)布站(w.dingstudio.cn)以及網(wǎng)頁郵箱系統(tǒng)(mail.dingstudio.cn)都接入自己開發(fā)的SSO單點(diǎn)登錄系統(tǒng)。SSO所在域名:passport.dingstudio.cn,上述域名均部署了https協(xié)議訪問,目前各應(yīng)用均無法檢測(cè)到由passport系統(tǒng)產(chǎn)生的session,passport的登錄認(rèn)證模塊和會(huì)話超時(shí)、會(huì)話續(xù)期系統(tǒng)已全部開發(fā)完畢。目前設(shè)計(jì)需求是SSO應(yīng)用程序通過其他業(yè)務(wù)應(yīng)用重定向時(shí)攜帶參數(shù)url,如login.php?url=http://www.dingstudio.cn/callback.php?處理登錄成功后的跳轉(zhuǎn)。callback.php為各個(gè)應(yīng)用的回調(diào)接口,登錄成功后的信息同步處理均交給callback.php。(URL參數(shù)讀取、處理已經(jīng)開發(fā)完畢并封裝了一個(gè)類)部分passport核心代碼:(這些代碼都是寫在一個(gè)php類里,前端入口通過require_once進(jìn)行調(diào)用)public?static?function?SSOCheckExist($special?=?'0')?{
????$nowtime?=?date('Ymdhis',time());
????session_start();
????if(isset($_SESSION['dingstudio_sso'])?&&?$nowtime?-?$_SESSION['dingstudio_ssotoken']?<=?600)?{
????????$_SESSION['dingstudio_ssotoken']?=?$nowtime;//系統(tǒng)會(huì)話自動(dòng)續(xù)期
return?"authed";//存在合法會(huì)話且處于時(shí)效期限內(nèi),返回自動(dòng)登陸
????}
????else?{
return?"noauth";//不存在合法會(huì)話或有效密鑰超時(shí),返回請(qǐng)求登陸
????}
}
public?static?function?SSOCheck($username,?$password)?{
????if(isset($username)?and?isset($password))?{
????????$sqlconn?=?MySQLInstance::getInstance()->connect();//通過單例方式建立MySQL數(shù)據(jù)庫連接
????????if($sqlconn->connect_error)?{
????return?"error-654";//返回?cái)?shù)據(jù)庫服務(wù)器宕機(jī)錯(cuò)誤碼
????????}
????????else?{
????$sqlcode?=?"select?*?from?users?where?(username='$username')?and?(password='$password')";//查詢數(shù)據(jù)庫檢測(cè)賬戶密碼是否匹配
????$result?=?$sqlconn->query($sqlcode);//執(zhí)行上述SQL語句
????if($result->num_rows?>?0)?{//登陸成功后
????????$dtoken?=?date('Ymdhis',time());//產(chǎn)生SSO令牌碼(使用時(shí)間)
????????$_SESSION['dingstudio_sso']?=?$username;//同步用戶名到Session
????????$_SESSION['dingstudio_ssotoken']?=?$dtoken;//同步SSO令牌碼到Session
????????$sqlcode?=?"update?users?set?usertoken='{$dtoken}'?where?username='$username'";//更新SSO令牌碼到數(shù)據(jù)庫
????????$result?=?$sqlconn->query($sqlcode);//執(zhí)行上述SQL語句
????????return?"authed";//返回認(rèn)證成功
????}
????else?{
????????return?"noauth";//返回認(rèn)證失敗
????}
????MySQLInstance::getInstance()->disconnect();//關(guān)閉數(shù)據(jù)庫連接
????????}
????}
}
- 1 回答
- 3 關(guān)注
- 3862 瀏覽
添加回答
舉報(bào)
0/150
提交
取消