❶ 使用thinkphp框架實現單點登錄,服務端也要用tp,誰弄過
可以參考各大開源軟體的實現模式,如discuz的uc,phpcms的phpsso等
❷ php 單點登錄
參考QQ、微信啊,做好各個系統的介面,然後整合
❸ php 怎麼實現單點登錄
php 單點登錄並不復雜。單獨登錄 (SSO)其實就是讓用戶通過一次登錄訪問授權的網路資源。如果是要實現的話,就需要找專業的解決方案了,比如玉符SSO單點登錄解決方案。
玉符單點登錄的優勢主要有:
玉符SSO支持市面上所有標准協議,雲服務或者本地部署都搞得定,微軟的SAML、谷歌的OIDC,包括CAS、Oauth、JWT等待各種協議都支持
可以提供自研SDK,完美解決自研系統或者沒有標准介面應用的問題,只需要十幾行代碼就可以完成。
玉符單點登錄SSO已經實現產品化,交付迅速,時間短,安全性強,單點登錄全部通過token令牌實現,不會拿到用戶的密碼,安全可靠。
希望我的回答對你有幫助。
❹ 詳解PHP如何實現單點登錄
可以配合session和資料庫(或緩存如redis或memcache)實現,具體步驟如下:
在登錄成功後保存一個時間戳+隨機字元的值,這個值暫時叫sign。把這個值存入資料庫(緩存),同時也存入session中。
寫一個函數,功能如下:讀取資料庫(緩存)中的sign,跟session中的sign對比。如不一致,則注銷當前session並提示:當前用戶已在其他地方登錄,你被頂下線。這個函數放到「鉤子」裡面,實現在每一個操作步驟之前都先調用此函數。
這樣,一個簡單的單點登錄功能就實現了。原理其實很簡單,就是每次登錄都把資料庫(緩存)裡面的sign都覆蓋一遍,這樣當之前登錄的人檢測到這個sign不一致以後就強制下線。
❺ SSO單點登錄的PHP實現方法(Laravel框架)
Laravel是一套簡潔、優雅的PHP
Web開發框架(PHP
Web
Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網路APP,而且每行代碼都可以簡潔、富於表達力。
簡單說一下我的邏輯,我也不知道我理解sso對不對。
假如三個站點
a..com
b..com
c..com
a..com
作為驗證用戶登錄賬戶。
b和c作為客戶端(子系統)。
b和c需要登錄的時候跳轉到a,並且攜帶參數source指明登陸後跳轉的鏈接。
a站點就是普通的登陸方式(校驗用戶密碼),校驗成功後做一些處理。需要生成一個ticket,具體怎麼生成都可以,只要安全就可以了。然後存儲到Cache裡面。這里有疑問,後面總結。登陸成功後直接跳轉到\(url就可以了。
```
php
private
function
getTicketUrl(\)source)
{
\(ticket
=
md5(time()+key);
Cache::put(\)ticket,
$user,
120);
$url
=
$source
.
'?ticket='
.
$ticket;
return
$url;
}
假如說a站帶著ticket跳轉到b站(b..com?ticket=xxxxxxxxxxxxxxxx```)
b站做一個全局的過濾器,接受這個ticket然後請求a站驗證ticket是否為a生成的。
b站過濾器App\Http\Middleware\CasAuthenticate代碼,這里判斷是否有ticket並發送請求到a站校驗。如果是登陸的,則拿到用戶UID進行登陸。
public
function
handle($request,
Closure
$next)
{
$ticket
=
$request->input('ticket');
if
($ticket)
{
$result
=
json_decode('http://a..com'
.
'/auth/check-ticket?ticket='
.
$ticket),
true);
if
($result['state']
==
"SUCCESS")
{
$request->session()->flush();
Auth::loginUsingId($result['result']['uid']);
return
redirect(redirect()->getUrlGenerator()->current());
}
}
return
$next($request);
}
邏輯算是完成了,但是有幾個疑問。
1.我這個實現,我自己都不知道是不是對的,這是我根據原理寫出來的。
2.假如b站現在跳轉到c站,由於b站活躍比較頻繁,session一直都在,而a站的緩存時間極有可能已經過期了,此時從b站跳轉到c站,c站跳轉到a站去判斷登陸,結果發現已經失效了,還是得登陸。所以這是有問題的,由於我們業務模塊相關性差,不會隨意跳轉,所以暫不考慮這樣的問題。但這確實是我的一個問題。我沒想清楚。
有關SSO單點登錄的PHP實現方法(Laravel框架),小編就給大家介紹這么多,希望對大家有所幫助!
❻ PHP 單點登錄代碼
假設有三個不同域名,a.com, b.com, c.com,將其中之一作為真正的登陸入口,所有的域名下發起的登陸,全部重定向到這個節點,這里假設選擇a.com/login.php為統一登入節點,為了方便說明,把a.com叫做主節點,其餘叫做從節點。
假設現在從任意站點發出登陸請求,最終都被帶到 a.com/login.php?from=b.com&sfkey=xxxxxx,用戶輸入登陸信息,假設登陸成功,返回一個登陸成功中間頁面,在這個頁面里,包含下面html代碼
<iframe width="0" height="0" src="b.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe>
<iframe width="0" height="0" src="c.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe>
sessid是登陸成功以後的session ID,sfkey是一個安全碼,這兩個串在login.php里綁定到當前登陸的用戶記錄上。
這個時候a.com實際已經登陸完畢,獲得了PHPSESSID的cookie。兩個iframe的作用是把獲得的session id立刻同步到從節點上,從節點的sso.php獲得sessid和sfkey後,首先校驗這個配對是否存在,如果存在,立刻把sessid值設為當前session id
session_id($_GET['sessid']); // 使用a.com產生的session id
session_start();
sso.php請求完畢後,b.com和c.com這兩個站點就獲得了和a.com一樣的PHPSESSID cookie;
這個頁面會把用戶重定向回所來自的頁面(到達login.php的時候記住了),重定向完成後,用戶已經在所有網站完成了同步登陸。
a.com發送iframe請求的時候使用加密的sessid=xxxxxx里的sessid,從節點的sso.php獲取密文後解密才獲得真實的session id
可以用單獨域名來作為登陸主節點,比如login.x.com,而不用a b c中的任意一個,login.x.com做且僅作登陸服務。
❼ php 怎麼實現單點登錄
您好,即插即用方式實現單點登錄:
對於 B/S結構應用系統,用戶只需通過瀏覽器界面登錄一次,即可通過UTrust SSO單點登錄系統訪問後台的多個用戶許可權內的Web應用系統,無需逐一輸入用戶名、密碼登錄。對於 C/S結構應用系統,通過IE控制項來實現對C/S系統客戶端的單點登錄,用戶輸入一次用戶名、密碼,即可訪問所有被授權的C/S系統資源。無論對於B/S和C/S結構的應用系統,實現單點登錄的功能時,後台應用系統無需任何修改。•後置代理方式實現單點登錄 對於有改造條件的B/S結構應用系統,UTrustSSO也提供了後置代理的方式實現單點登錄。SSO 系統提供各種API,Agent代理,對原有應用系統進行改造,改變原有應用系統的認證方式,同時採用認證伺服器提供的技術進行一次性身份認證,實現單點登錄。