SSO是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。那么在PHP中要如何實現(xiàn)SSO單點登錄呢?下面本篇文章給大家詳細(xì)介紹一下單點登錄SSO的實現(xiàn)方式。
SSO( Single Sign On ),即單點登錄,是一種控制多個相關(guān)但彼此獨立的系統(tǒng)的訪問權(quán)限, 擁有這一權(quán)限的用戶可以使用單一的ID和密碼訪問某個或多個系統(tǒng)從而避免使用不同的用戶名或密碼,或者通過某種配置無縫地登錄每個系統(tǒng) 。
對于大型系統(tǒng)來說使用單點登錄可以減少用戶很多的麻煩。就拿百度來說吧,百度下面有很多的子系統(tǒng)——百度經(jīng)驗、百度知道、百度文庫等等,如果我們使用這些系統(tǒng)的時候,每一個系統(tǒng)都需要我們輸入用戶名和密碼登錄一次的話,我相信用戶體驗肯定會直線下降。
與 SSO 交互的2個元素:1. ?用戶,2. 系統(tǒng),它的特點是:一次登錄,全部訪問。SSO 是訪問控制的一種,控制用戶能否登錄,即驗證用戶身份,而且是所有其它系統(tǒng)的身份驗證都在它這里進(jìn)行,從整個系統(tǒng)層面來看 SSO ,它的核心就是這3個元素了:1. 用戶,2. 系統(tǒng),3. 驗證中心。
1、同一個域但不同的子域如何進(jìn)行單點登錄
假如我們的站點是按照下面的域名進(jìn)行部署的:
- sub1.onmpw.com
- sub2.onmpw.com
這兩個站點共享同一域 onmpw.com 。
默認(rèn)情況下,瀏覽器會發(fā)送 cookie 所屬的域?qū)?yīng)的主機(jī)。也就是說,來自于 sub1.onmpw.com 的 cookie 默認(rèn)所屬的域是 .sub1.onmpw.com 。因此,sub2.onmpw.com 不會得到任何的屬于 sub1.onmpw.com 的 cookie 信息。因為它們是在不同的主機(jī)上面,并且二者的子域也是不同的。
1.1 設(shè)置二者的 cookie 信息在同一個域下
- 登錄 sub1.onmpw.com 系統(tǒng)
- 登錄成功以后,生成唯一標(biāo)識符Token(知道token,就知道哪個用戶登錄了)。設(shè)置 cookie 信息,這里需要注意,將Token存到 cookie 中,但是在設(shè)置的時候必須將這 cookie 的所屬域設(shè)置為頂級域 .onmpw.com 。這里可以使用 setcookie 函數(shù),該函數(shù)的第四個參數(shù)是用來設(shè)置 cookie 所述域的。
setcookie(‘token’,?’xxx’,?'/',?’.onmpw.com’);復(fù)制代碼
訪問 sub2.onmpw.com 系統(tǒng),瀏覽器會將 cookie 中的信息 token 附帶在請求中一塊兒發(fā)送到 sub2.onmpw.com 系統(tǒng)。這時該系統(tǒng)會先檢查 session 是否登錄,如果沒有登錄則驗證 cookie 中的 token 從而實現(xiàn)自動登錄。
sub2.onmpw.com 登錄成功以后再寫 session 信息。以后的驗證就用自己的 session 信息驗證就可以了。
1.2 退出登錄
這里存在一個問題就是 sub1 系統(tǒng)退出以后,除了可以清除自身的 session 信息和所屬域為 .onmpw.com 的 cookie 的信息。它并不能清除 sub2 系統(tǒng)的 session 信息。那 sub2 仍然是登錄狀態(tài)。也就是說,這種方式雖說可以實現(xiàn)單點登錄,但是不能實現(xiàn)同時退出。原因是,sub1 和 sub2 雖說通過 setcookie 函數(shù)的設(shè)置可以共享 cookie,但是二者的sessionId 是不同的,而且這個 sessionId 在瀏覽器中也是以 cookie 的形式存儲的,不過它所屬的域并不是 .onmpw.com 。
那如何解決這個問題呢?我們知道,對于這種情況,只要是兩個系統(tǒng)的 sessionId 相同就可以解決這個問題了。也就是說存放 sessionId 的 cookie 所屬的域也是 .onmpw.com 。在PHP中,sessionId 是在 session_start() 調(diào)用以后生成的。要想使sub1 和 sub2 有共同的 sessionId ,那必須在 session_start() 之前設(shè)置 sessionId 所屬域:
ini_set('session.cookie_path',?'/'); ini_set('session.cookie_domain',?'.onmpw.com'); ini_set('session.cookie_lifetime',?'0');復(fù)制代碼
- 1、經(jīng)過上面的步驟就可以實現(xiàn)不同二級域名的單點登錄與退出。
- 2、不過還可以再簡化,如確保 sessionId 相同就可以實現(xiàn)不同二級域名的單點登錄與退出。
- 參考文章: https://www.onmpw.com/tm/xwzj/network_145.html
2、不同域之間如何實現(xiàn)單點登錄 - CAS
假設(shè)我們需要在以下這些站之間實現(xiàn)單點登錄
- www.onmpw1.com
- www.onmpw2.com
- www.onmpw3.com
上面的方案就行不通了。
目前 github 上有開源的 SSO 解決方案,實現(xiàn)原理與主流 SSO 差不多:https://github.com/jasny/sso
核心原理:
- 1、客戶端訪問不同的子系統(tǒng),子系統(tǒng)對應(yīng)的 SSO 用戶服務(wù)中心使用相同的 SessionId。
- 2、子系統(tǒng) Broker 與 Server 間通過 attach 進(jìn)行了授權(quán)鏈接綁定
同根域名不指定 domain 根域名,第一次授權(quán)需要每次都要跳轉(zhuǎn)到授權(quán)服務(wù),但是指定了domain, 同根域名只要有一個授權(quán)成功,都可以共用那個 cookie 了,下次就不用再授權(quán)了,直接就可以請求用戶信息了。
第一次訪問A:
第二次訪問B:
2.1 登錄狀態(tài)判斷
用戶到認(rèn)證中心登錄后,用戶和認(rèn)證中心之間建立起了會話,我們把這個會話稱為全局會話。當(dāng)用戶后續(xù)訪問系統(tǒng)應(yīng)用時,我們不可能每次應(yīng)用請求都到認(rèn)證中心去判定是否登錄,這樣效率非常低下,這也是單Web應(yīng)用不需要考慮的。
我們可以在系統(tǒng)應(yīng)用和用戶瀏覽器之間建立起局部會話,局部會話保持了客戶端與該系統(tǒng)應(yīng)用的登錄狀態(tài),局部會話依附于全局會話存在,全局會話消失,局部會話必須消失。
用戶訪問應(yīng)用時,首先判斷局部會話是否存在,如存在,即認(rèn)為是登錄狀態(tài),無需再到認(rèn)證中心去判斷。如不存在,就重定向到認(rèn)證中心判斷全局會話是否存在,如存在,通知該應(yīng)用,該應(yīng)用與客戶端就建立起它們之間局部會話,下次請求該應(yīng)用,就不去認(rèn)證中心驗證了。
2.2 退出
用戶在一個系統(tǒng)退出了,訪問其它子系統(tǒng),也應(yīng)該是退出狀態(tài)。要想做到這一點,應(yīng)用除結(jié)束本地局部會話外,還應(yīng)該通知認(rèn)證中心該用戶退出。
認(rèn)證中心接到退出通知,即可結(jié)束全局會話,用戶訪問其它應(yīng)用時,都顯示已登出狀態(tài)。
需不需要立即通知所有已建立局部會話的子系統(tǒng),將它們的局部會話銷毀,可根據(jù)實際項目來。
推薦學(xué)習(xí):《PHP視頻教程》
以上是深入淺析PHP中實現(xiàn)SSO單點登錄的方法的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲并發(fā)送至PHP后端;2.PHP將音頻保存為臨時文件后調(diào)用STTAPI(如Google或百度語音識別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語音合成)將回復(fù)轉(zhuǎn)為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯誤處理,確保各環(huán)節(jié)無縫銜接。

在PHP中搭建社交分享功能的核心方法是通過動態(tài)生成符合各平臺要求的分享鏈接。1.首先獲取當(dāng)前頁面或指定的URL及文章信息;2.使用urlencode對參數(shù)進(jìn)行編碼;3.根據(jù)各平臺協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態(tài)生成頁面OG標(biāo)簽優(yōu)化分享內(nèi)容展示;6.務(wù)必對用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無需復(fù)雜認(rèn)證,維護(hù)成本低,適用于大多數(shù)內(nèi)容分享需求。

要實現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯與語法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調(diào)用API并處理返回結(jié)果;3.在應(yīng)用中展示糾錯信息并允許用戶選擇是否采納;4.使用php-l和PHP_CodeSniffer進(jìn)行語法檢測與代碼優(yōu)化;5.持續(xù)收集反饋并更新模型或規(guī)則以提升效果。選擇AIAPI時應(yīng)重點評估準(zhǔn)確率、響應(yīng)速度、價格及對PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)范、合理使用緩存、避免循環(huán)查詢、定期審查代碼,并借助X

1.評論系統(tǒng)商業(yè)價值最大化需結(jié)合原生廣告精準(zhǔn)投放、用戶付費增值服務(wù)(如上傳圖片、評論置頂)、基于評論質(zhì)量的影響力激勵機(jī)制及合規(guī)匿名數(shù)據(jù)洞察變現(xiàn);2.審核策略應(yīng)采用前置審核 動態(tài)關(guān)鍵詞過濾 用戶舉報機(jī)制組合,輔以評論質(zhì)量評分實現(xiàn)內(nèi)容分級曝光;3.防刷需構(gòu)建多層防御:reCAPTCHAv3無感驗證、Honeypot蜜罐字段識別機(jī)器人、IP與時間戳頻率限制阻止灌水、內(nèi)容模式識別標(biāo)記可疑評論,持續(xù)迭代應(yīng)對攻擊。

PHP不直接進(jìn)行AI圖像處理,而是通過API集成,因為它擅長Web開發(fā)而非計算密集型任務(wù),API集成能實現(xiàn)專業(yè)分工、降低成本、提升效率;2.整合關(guān)鍵技術(shù)包括使用Guzzle或cURL發(fā)送HTTP請求、JSON數(shù)據(jù)編解碼、API密鑰安全認(rèn)證、異步隊列處理耗時任務(wù)、健壯錯誤處理與重試機(jī)制、圖像存儲與展示;3.常見挑戰(zhàn)有API成本失控、生成結(jié)果不可控、用戶體驗差、安全風(fēng)險和數(shù)據(jù)管理難,應(yīng)對策略分別為設(shè)置用戶配額與緩存、提供prompt指導(dǎo)與多圖選擇、異步通知與進(jìn)度提示、密鑰環(huán)境變量存儲與內(nèi)容審核、云存

PHP通過數(shù)據(jù)庫事務(wù)與FORUPDATE行鎖確保庫存扣減原子性,防止高并發(fā)超賣;2.多平臺庫存一致性需依賴中心化管理與事件驅(qū)動同步,結(jié)合API/Webhook通知及消息隊列保障數(shù)據(jù)可靠傳遞;3.報警機(jī)制應(yīng)分場景設(shè)置低庫存、零/負(fù)庫存、滯銷、補(bǔ)貨周期和異常波動策略,并按緊急程度選擇釘釘、短信或郵件通知責(zé)任人,且報警信息需完整明確,以實現(xiàn)業(yè)務(wù)適配與快速響應(yīng)。

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

選擇合適AI語音識別服務(wù)并集成PHPSDK;2.用PHP調(diào)用ffmpeg將錄音轉(zhuǎn)為API要求格式(如wav);3.上傳文件至云存儲并調(diào)用API異步識別;4.解析JSON結(jié)果并用NLP技術(shù)整理文本;5.生成Word或Markdown文檔完成會議記錄自動化,全過程需確保數(shù)據(jù)加密、訪問控制與合規(guī)性以保障隱私安全。
