程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> FormsAuthentication實現單點登錄,java實現單點登錄

FormsAuthentication實現單點登錄,java實現單點登錄

編輯:C#入門知識

FormsAuthentication實現單點登錄,java實現單點登錄


原文地址:http://www.wlm.so/Article/Detail/lmb48bk9f690n00000

單點登錄,這種在網絡非常常見,在這裡討論的是實現同一主域下的子站間的單點登錄,同樣也適用於使用負載均衡後站點的登錄識別。

.net,討論基於MVC環境下的,假設域名為 wlm.so。

基礎條件:

1.cookie共享

2.FormsAuthentication加密

3.服務器端處理

 

 

還是一樣,從原理開始:

原理非常簡單,所有登錄後,將用戶的標識放在客戶端的cookie裡面,通過cookie共享,每次請求服務器端將客戶端發送的cookie直接當成標識來識別用戶。

這個過程中安全就非常重要了,怎麼做到安全呢?

FormsAuthentication認證,FormsAuthenticationTicket票據加密。

 

 

1.cookie共享

假設主域為wlm.so,子域為a.wlm.so以及b.wlm.so。

那麼在服務器端寫入cookie時必須為cookie指定主域。代碼如下:

 

那麼當cookie未過期時,打開a.wlm.so或者打開b.wlm.so時該cookie就會相應的被提交。

 

2.FormsAuthentication加密

假設,我們在cookie寫上用戶名的話,那將是非常的不安全,因此使用FormsAuthentication驗證方式,通過FormsAuthentication創建驗證票據,將票據保存在客戶端。

首先上代碼:

webconfig配置票據代碼:

票據創建與寫入代碼,login.LoginName是登錄名,也是用戶標識:

 

通過創建票據後,寫入客戶端cookie,如果需要記錄登錄信息,請加上cookie過期時間即可。

通過上述創建的票據將被寫在cookie中,訪問主域下的二級網站時均會被提交。但是不同IIS該票據加密密鑰是不一樣的,因此無法識別,需要配置密鑰讓不同服務器上的IIS都能識別驗證票據。

 

3.FormsAuthentication密鑰生成與配置

只需要在webconfig中增加配置即可:

該配置中附帶著加密密鑰與解密密鑰以及加密方式,密鑰不是隨意生成的,附帶生成代碼:

點擊下載生成代碼

 

4.服務器識別到用戶標識後,需要進行session記錄,或者其他記錄方式即可通過通常代碼實現,這裡不做討論。服務器端獲取用戶登錄名如下:

a)判斷用戶是否已經登錄

if(httpContext.User.Identity.IsAuthenticated){

//已經登錄

}

 

b)獲取登錄名

 

string name=HttpContext.Current.User.Identity.Name;//即前文中的login.loginName

 

 

附上代碼:



HttpCookie cookie = new System.Web.HttpCookie("cookiename", "cookievalue");
cookie.Domain = "wlm.so";
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);




FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,// 版本號。
u.Id,// 與身份驗證票關聯的用戶名。 
DateTime.Now,// Cookie 的發出時間。
DateTime.Now.AddMinutes(1000),// Cookie 的到期日期。 
login.Persistent != 0,// 如果 Cookie 是持久的,為 true;否則為 false。 
login.LoginName//寫入用戶名稱
);
HttpCookie cookie = 
new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, 
FormsAuthentication.Encrypt(ticket));
cookie.Domain = "wlm.so";
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
return LoginState.Success;




<authentication mode="Forms">
  <forms name="FormsAuthCookie" 
 path="/" loginUrl="~/Login" 
 domain="wlm.so" />
</authentication>
<machineKey validationKey="****" 
decryptionKey="***" 
validation="SHA1"/>

 


Java實現單點登錄(多域)

代碼不能帖給你 不好意思....

使用 CAS-server組件 一般的,單點登錄都是使用LDAP數據庫

我之前給學校做過一個基於SOA的校園統一管理構建 使用的就是這套配置 不錯呀不錯 呵呵~~

單點登錄的重點是:無論兩個網站地域和服務器是否分離,只要他們服務器上面都有你單點登錄服務器上的證書存根即可... 所以不需要關心什麼域名之類的東西 只要證書存根在每個網站上 一切好說

你的思路有些問題:單點登錄並不是對網站cookies的傳遞 它是基於https的一種安全機制的東東 也就是ca證書 如果用cookies傳遞的話,你就會遇到跨網站時cookies共享問題,這是個思路死角
 

單點登錄,java實現

看你怎麼做了,有開源框架可以幫助你,!
一般用spring 的security比較不錯
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved