XH通用登錄v1.3及以上版本

2024-08-04 14:37 更新

該版本功能說(shuō)明:

例如,我現(xiàn)在已登錄OA系統(tǒng),用戶(hù)名為測(cè)試,郵箱為css@qq.com,手機(jī)號(hào)碼為178。如果在Dzz系統(tǒng)中也存在相同的用戶(hù)名、電子郵件地址和手機(jī)號(hào)碼,那么通過(guò)這個(gè)特殊鏈接打開(kāi)Dzz后就是該用戶(hù)的帳號(hào)。如果Dzz系統(tǒng)中沒(méi)有這些信息,則會(huì)根據(jù)特殊鏈接中的帳戶(hù)名和郵箱在Dzz系統(tǒng)中注冊(cè)一個(gè)新帳戶(hù),并使用默認(rèn)密碼登錄。管理員可以修改默認(rèn)密碼。

接口地址:index.php?mod=xhlogin;

請(qǐng)求方式:跳轉(zhuǎn)方式;

請(qǐng)求地址:http://127.0.0.1/index.php?mod=xhlogin&dateline=XXX&email=XXX&orgpath=XXX&password=XXX&phone=XXX&username=XXX&token=XXX&redirect=XXX

接口說(shuō)明:驗(yàn)證成功后跳轉(zhuǎn)到DzzOffice首頁(yè)或者指定的頁(yè)面。注意:該接口可以直接通過(guò)后端登陸某個(gè)賬號(hào),注意安全保密,切勿泄露XH通用登錄KAY,建議定期更換;

請(qǐng)求參數(shù):

參數(shù)類(lèi)型是否必填最大長(zhǎng)度示例值描述
datelineint101712215131超時(shí)時(shí)間60秒
usernamestring三選一30測(cè)試用戶(hù)名
emailstring三選一40css@qq.com郵箱
passwordstring32123456用戶(hù)密碼
phonestring三選一11110用戶(hù)手機(jī)號(hào)碼
orgpathstring小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部用戶(hù)所屬機(jī)構(gòu)部門(mén),使用逗號(hào)(,)分隔多個(gè)機(jī)構(gòu),使用斜杠(/)分隔上下級(jí)部門(mén),如果沒(méi)有找到相應(yīng)的機(jī)構(gòu)或部門(mén),會(huì)自動(dòng)創(chuàng)建
redirectstringhttp://127.0.0.1登錄成功后,跳轉(zhuǎn)的地址。默認(rèn)跳轉(zhuǎn)到首頁(yè)
tokenstring6aafb1afaab15c7d44b8a1e0733eb7e7f350a48ab8441353d5d29bd3ba116543簽名字符串

組合后的地址類(lèi)似于:

http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95&token=7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f&redirect=http%3A%2F%2F127.0.0.1

原理與流程

  1. 初始檢查

檢查XH通用登錄是否開(kāi)啟:系統(tǒng)首先檢查是否啟用了XH通用登錄功能。如果未開(kāi)啟,則直接返回提示信息,如“XH通用登錄未開(kāi)啟”。

檢查T(mén)oken參數(shù):驗(yàn)證請(qǐng)求中是否包含了必要的Token參數(shù)。如果Token是必要參數(shù)且未填寫(xiě),則返回提示信息,如“Token參數(shù)缺失”。

  1. 動(dòng)態(tài)時(shí)間驗(yàn)證(如果啟用)

檢查請(qǐng)求中的時(shí)間戳是否在允許的范圍內(nèi)(通常是當(dāng)前時(shí)間與一個(gè)合理的時(shí)間窗口內(nèi))。如果時(shí)間戳無(wú)效,則返回提示信息,如“驗(yàn)證時(shí)間已過(guò)期,請(qǐng)重新獲取”。

  1. 參數(shù)驗(yàn)證

對(duì)用戶(hù)名、郵箱、密碼、電話(huà)號(hào)碼、機(jī)構(gòu)部門(mén)等參數(shù)進(jìn)行非空和格式正確性驗(yàn)證。

如果用戶(hù)名、郵箱、電話(huà)號(hào)碼參數(shù)都不存在,則返回相應(yīng)的錯(cuò)誤提示。

  1. Token生成與驗(yàn)證(如果適用)

根據(jù)傳入的參數(shù)(如用戶(hù)名、密碼等)和服務(wù)器端的密鑰,生成一個(gè)Token。

將生成的Token與請(qǐng)求中提供的Token進(jìn)行比較。如果Token不匹配,則返回提示信息,如“Token驗(yàn)證失敗”。

  1. 用戶(hù)登錄或注冊(cè)

用戶(hù)存在性查詢(xún):根據(jù)用戶(hù)名、郵箱、電話(huà)號(hào)碼(三選一)查詢(xún)用戶(hù)UID是否存在。

用戶(hù)存在:更新用戶(hù)信息(可選,根據(jù)傳入的參數(shù)決定),并進(jìn)行登錄操作,隨后重定向到指定頁(yè)面。

用戶(hù)不存在且允許注冊(cè):檢查請(qǐng)求中是否至少包含username和email兩個(gè)參數(shù)。如果滿(mǎn)足條件,則根據(jù)傳入的參數(shù)進(jìn)行注冊(cè)操作。注冊(cè)成功后,進(jìn)行登錄并重定向到指定頁(yè)面。

信息同步:

在用戶(hù)登錄或注冊(cè)時(shí),根據(jù)請(qǐng)求中的信息同步用戶(hù)的username(用戶(hù)名)、email(郵箱)、phone(手機(jī)號(hào))、password(密碼)以及機(jī)構(gòu)部門(mén)等信息。如果請(qǐng)求中未提供某些信息,則不更新這些信息。

  1. 組織關(guān)系同步

機(jī)構(gòu)部門(mén)信息解析:如果提供了機(jī)構(gòu)部門(mén)信息,系統(tǒng)會(huì)根據(jù)指定的格式(使用逗號(hào)(,)分隔多個(gè)機(jī)構(gòu),使用斜杠(/)分隔上下級(jí)部門(mén))進(jìn)行解析。

機(jī)構(gòu)部門(mén)關(guān)聯(lián)處理:

可能先刪除用戶(hù)現(xiàn)有的機(jī)構(gòu)部門(mén)關(guān)聯(lián)(取決于系統(tǒng)設(shè)計(jì))。

在數(shù)據(jù)庫(kù)中查找解析后的機(jī)構(gòu)部門(mén)。

如果機(jī)構(gòu)或部門(mén)不存在,則自動(dòng)創(chuàng)建它們。

更新用戶(hù)的機(jī)構(gòu)部門(mén)關(guān)聯(lián)信息。

  1. 日志記錄

在每個(gè)關(guān)鍵步驟(如參數(shù)驗(yàn)證、用戶(hù)查詢(xún)、登錄/注冊(cè)成功/失敗、組織關(guān)系同步等)記錄日志。確保日志信息包含足夠的細(xì)節(jié),以便在需要時(shí)能夠重現(xiàn)用戶(hù)的行為和系統(tǒng)的響應(yīng)。這有助于后續(xù)的審計(jì)、問(wèn)題追蹤和系統(tǒng)維護(hù)。

示例(php):

$key='bljt@2023';//XH通用登錄KAY
//參數(shù)
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'測(cè)試',
    'password'=>'123456',
    'phone' =>'110',
    'orgpath' =>'小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部'
);
//參數(shù)排列
ksort($params);
/* 排序后參數(shù)數(shù)組
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => 小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部 [password] => 123456 [phone] => 110 [username] => 測(cè)試 )
*/
//將參數(shù)轉(zhuǎn)換為url-encode字符串
$httpstr=http_build_query($params);
/* 編碼后的簽名字符串
dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95
*/
//使用sha256計(jì)算簽名
 $token = hash_hmac('sha256',$httpstr,$key);
 /*計(jì)算后的簽名值
7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f
 */
// 重定向地址
$redirect='http://127.0.0.1';
// 組合 URL
$loginUrl = "http://127.0.0.1/index.php?mod=xhlogin&" . $httpstr . "&token=" . $token . "&redirect=" . urlencode($redirect);
/*組合后的地址
http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95&token=7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f&redirect=http%3A%2F%2F127.0.0.1
*/
// 執(zhí)行重定向
header("Location: " . $loginUrl);

注意:

示例當(dāng)中的參數(shù)即規(guī)定鍵名(數(shù)值或字符串)不能去掉,可以沒(méi)有規(guī)定鍵值。比如說(shuō)只有郵箱和時(shí)間戳參數(shù)值,就是如下代碼:

$key='bljt@2023';//XH通用登錄KAY
//參數(shù)
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'',
    'password'=>'',
    'phone' =>'',
    'orgpath' =>''
);
//參數(shù)排列
ksort($params);
/* 排序后參數(shù)數(shù)組
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => [password] => [phone] => [username] => )
*/
//將參數(shù)轉(zhuǎn)換為url-encode字符串
$httpstr=http_build_query($params);
/* 編碼后的簽名字符串
dateline=1712215131&email=css%40qq.com&orgpath=&password=&phone=&username=
*/
//使用sha256計(jì)算簽名
 $token = hash_hmac('sha256',$httpstr,$key);
 /*計(jì)算后的簽名值
01b43c567ef38c5d941c0d042bf27c35cd91d7b13f01019456c44d913ddfacde
 */
// 重定向地址
$redirect='http://127.0.0.1';
/*組合后的地址
http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=&password=&phone=&username=&token=01b43c567ef38c5d941c0d042bf27c35cd91d7b13f01019456c44d913ddfacde&redirect=http%3A%2F%2F127.0.0.1
*/
// 執(zhí)行重定向
header("Location: " . $loginUrl);

提示信息說(shuō)明:

提示信息可在系統(tǒng)日志-用戶(hù)登錄中查看詳細(xì)信息。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)