C 基於Redis快取實現單點登入SSO的例項

2021-10-23 11:08:34 字數 3175 閱讀 3932

最近公司的多個業務系統要統一整合使用同乙個登入,這就是我們耳熟能詳的單點登入,現在就net基於redis快取實現單點登入做乙個簡單的分享。

單點登入(single sign on),簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。

普通的登入是寫入session,每次獲取session看看是否有登入就可記錄使用者的登入狀態。

同理多個站點用乙個憑證,可以用分布式session,我們可以用redis實現分布式session,來實現乙個簡單的統一登入demo

我們在本地iis建立三個站點

登入驗證的站點

站點1站點2

修改host檔案c:\windows\system32\drivers\etc下

127.0.0.1 www.a.com

127.0.0.1 test1.a.com

127.0.0.1 test2.a.com

127.0.0.1 sso.a.com

具體實現原理,當使用者第一次訪問應用系統test1的時候,因為還沒有登入,會被引導到認證系統中進行登入;根據使用者提供的登入資訊,認證系統進行身份校驗,如果通過校驗,應該返回給使用者乙個認證的憑據--ticket;使用者再訪問別的應用的時候就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行校驗,檢查ticket的合法性。如果通過校驗,使用者就可以在不用再次登入的情況下訪問應用系統test2和應用系統test3了。

專案結構

sso.a.com登入驗證站點

用 戶:

"txtusername"

type

="text"

name

="username"

/>

/>

/>

密 碼:

type

="password"

name

="password"

/>

/>

/>

type

="submit"

value

="登入"

/>

/>

/>

style

="color

: red;

margin-top

: 20px;

">

span

>

form

>

body

>

html

>

**:

public partial class index : system.web.ui.page

public string username

public string passwork

protected void page_load(object sender, eventargs e)

}//登入驗證

private void validateuser()

var password = request.form["password"];

if (password.equals(""))

//模擬登入

if (username == "admin" && password == "admin")

;//生成token

var token = guid.newguid().tostring();

//寫入token

//寫入憑證

client.set

>

(token, userinfo);

//跳轉回分站

if (request.querystring["backurl"] != null)

else

}else}}

配置檔案:

>

key=

"userauthurl"

value

=""/>

key=

"redisserver"

value

="192.168.10.121"

/>

key=

"timeout"

value

="30"

/>

key=

"defaulturl"

value

="/"

/>

>

登出**:

var tokenvalue = common.common.getcookie("token");
common.common.addcookie("token",tokenvalue,-1);其他站點驗證是否登入的**:passportservice

基於Flask session機制的單點登入

flask 預設的是 client side session flask by default usesthe werkzeug provided secure cookie as session system.it works by picklingthe session data,compres...

基於Redis實現的單點登入

背景 每個web應用都有自己的session,那如何在分布式或者集群環境下統一session,即如何實現單點登入,如下圖 解決方案 把session資料存放在redis,統一管理,向外提供服務介面,redis可以設定過期時間,對應session的失效時間 優點 訪問速度快,效率高 無單點故障,可以部...

基於JWT和Oauth2 實現 SSO 單點登入

1.jwt 的特點 自包含 在jwt裡面可以包含很多資訊,可從伺服器解析,而不僅僅是一串沒有意義的字串。密簽 安全簽名,防止別人篡改。可擴充套件 因為jwt可以包含有用的資訊,所以其具有不俗的擴充套件性。如圖 1.流程 訪問應用a服務,會跳到認證伺服器的登入頁面,輸入使用者名稱和密碼登入後,再訪問應...