最近公司的多個業務系統要統一整合使用同乙個登入,這就是我們耳熟能詳的單點登入,現在就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服務,會跳到認證伺服器的登入頁面,輸入使用者名稱和密碼登入後,再訪問應...