監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢(xún)管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶(hù)案例 | 在線(xiàn)試用
X 關(guān)閉
重慶OA行業(yè)資訊

當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶OA行業(yè)資訊

Hi, 現(xiàn)在我們暫時(shí)不談Passport

申請(qǐng)免費(fèi)試用、咨詢(xún)電話(huà):400-8352-114

AMTeam.org

Hi, 現(xiàn)在我們暫時(shí)不談Passport

在我寫(xiě)了那篇Passport你的網(wǎng)站之后,我發(fā)現(xiàn)自己犯了一個(gè)錯(cuò)誤,從一開(kāi)始。也許當(dāng)時(shí)只是想表達(dá)自己對(duì)Passport的喜愛(ài)和接觸之后還算美好的虛榮感受。我想在當(dāng)時(shí)陶醉時(shí),肯定刻意忽略了其它的某種因素。不然當(dāng)計(jì)劃正式開(kāi)始使用它時(shí),不會(huì)發(fā)現(xiàn)它突然帶有了某種不確定性,甚至退后到測(cè)試的機(jī)器上也不能工作了;多次再去做和對(duì)著文檔去想了又想,開(kāi)始有些慚愧,因?yàn)槲野l(fā)現(xiàn)那篇文檔幾乎毫無(wú)用處,這將是一次名不其實(shí)表述,那么對(duì)于一個(gè)技術(shù)人員來(lái)說(shuō),這種感受是痛傷的,同時(shí)對(duì)他來(lái)說(shuō)也將是個(gè)教訓(xùn)。

不過(guò)Passport的重要性絲毫不亞于它的復(fù)雜和繁瑣,無(wú)法預(yù)知Microsoft將如何改善這種長(zhǎng)距離的集中驗(yàn)證所帶來(lái)的不確定“刺耳音符”,但在未來(lái)可以看到的體系和應(yīng)用中,避而不見(jiàn)Passport,也意味著今后你在MS平臺(tái)上要冒更多的風(fēng)險(xiǎn)。那么對(duì)于“是否需要接觸Passport?”、“現(xiàn)在是否需要學(xué)習(xí)了解Passport?”這樣問(wèn)題的答案都應(yīng)該是慎重的“應(yīng)該”,放棄觀(guān)望的態(tài)度將是一個(gè)好的開(kāi)始。我們可以在接觸學(xué)習(xí)中等待3.0版本的Passport,不過(guò)在沒(méi)有更好的Demo,沒(méi)有我們需要的Help文檔的一段時(shí)間里,現(xiàn)在我們暫時(shí)不談MS的Passport。它依然復(fù)雜得超出我們的理解,我們只能一點(diǎn)點(diǎn)去嘗試和了解,做那些我們力所能及的事。最后歡迎回到這個(gè)脆弱而迷幻的世界,它依然充滿(mǎn)失落和期待。

下面將是一個(gè)Passport的實(shí)現(xiàn)(我猜是最小的一個(gè)框架),它的最初是Nathan Smith (nathan_y_smith@hotmail.com )示范性的一個(gè)dotNET β2的版本,調(diào)試時(shí)我進(jìn)行了一些小的改動(dòng)(不少改進(jìn)吧,但主框架沒(méi)動(dòng)),并且添加了一個(gè)簡(jiǎn)單的測(cè)試前端。在我升級(jí)到dotNET 1.0后,重新測(cè)試了它,所以它需要的環(huán)境可能是:

Windows 2000 Server, MS SQL 2000 SP2 (中文或英文),dotNET SDK 1.0 , VS.NET RTM,IIS 5.0 SP, IE6 2813

數(shù)據(jù)結(jié)構(gòu):

設(shè)計(jì)兩個(gè)數(shù)據(jù)庫(kù):PassportSvr , PassportClient

PassportSvr:


 

PassportClient:


 另外還有下面這些實(shí)現(xiàn)核心功能的存儲(chǔ)過(guò)程:

sp_registerUser

sp_setUserInfo

sp_setUserPassword

sp_setUserStatus

sp_purgeUser

sp_setUserHomeService

sp_validateUser

sp_registerService

sp_setServiceInfo

sp_setServicePassword

sp_setServiceStatus

sp_purgeService

sp_validateService

應(yīng)用實(shí)現(xiàn):

根據(jù)上面的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)了兩個(gè)Web Services,一個(gè)作為整體的Services的管理接口,一個(gè)是提供給最終用戶(hù)使用的Client Services接口。

看得出來(lái)最終提供給用戶(hù)使用的只有7個(gè)函數(shù),當(dāng)然開(kāi)始時(shí)你可以在調(diào)試Services WebServices時(shí)測(cè)試一下RegisterService函數(shù),它將建立一個(gè)Services,記下services_name和 services_password ,在實(shí)現(xiàn)Client的WebService的Global.cs中有這樣應(yīng)用:

protected void Application_Start(Object sender, EventArgs e)

{

DataManager.InitManager();

Passport ppSvc = new Passport();

AppTicket = ppSvc.AuthenticateService("Passport","passport");

ppSvc=null;

}

整個(gè)實(shí)現(xiàn)中有個(gè)與Passport相似的安全機(jī)制-Ticket,當(dāng)用戶(hù)通過(guò)驗(yàn)證之后獲得一個(gè)AuthenticationTicket并產(chǎn)生一個(gè)Token,我認(rèn)為這里是最有趣和最棒的部分,簡(jiǎn)單有效。

Ticket Structure

public class AuthenticationTicket

{

public AuthenticationTicket()

{

}

public int Token;

public int OwnerID;

public double ExpirationDate;

public double IssueDate;

public string NickName;

public string FirstName;

public string LastName;

}

Token Generation Routine

static private int GenerateToken(int systemID, string nickName,

int passwordHash, double issueDate, double expirationDate)

{

int rtn; // our return value

string s_token; // string concatenation of the objects

// concatenate all of our values together.

// note the use of hashing the password and the id, this

// *should* help reduce the probability of attack

s_token=systemID.GetHashCode().ToString() +

nickName + passwordHash.GetHashCode().ToString() +

issueDate.ToString() + expirationDate.ToString();

// get the hash of the concatenation and return it

rtn=s_token.GetHashCode();

return rtn;

}

好了解決了主要問(wèn)題,后面的實(shí)現(xiàn)的就迎刃而解了,下面分別是兩個(gè)Web Services暴露的功能函數(shù)。

public AuthenticationTicket AuthenticateService

public AuthenticationTicket AuthenticateUser

public AuthenticationTicket CreateAccount

public int DisableAccount

public int EnableAccount

public int PurgeAccount

public int SetAccountHome

public int SetAccountInfo

public int SetAccountPassword

public int SetServiceInfo

public int SetServicePassword

public int RegisterService

public bool ValidateServiceTicket

public bool ValidateUserTicket

看得出真正Client端用的接口很簡(jiǎn)單和明了,(這是又一個(gè)不錯(cuò)的亮點(diǎn))如果一切OK,那么你點(diǎn)擊RegisterAccount,輸入需要的數(shù)據(jù),如果正確那么返回下面的結(jié)果:

剩下的工作我想就是包裝一下,用一個(gè)ASP.NET的Web Form再測(cè)試和使用了。

 


 

結(jié)論:

這將是一個(gè)可能的Passport的實(shí)現(xiàn),當(dāng)然不是全部,但如果不是必須并不建議將其使用在正式的應(yīng)用中,但你可以從下面的建議中去加強(qiáng)和衍生擴(kuò)展它:

1. 體系結(jié)構(gòu)上用了最新的Web Services,或許原來(lái)的作者太喜歡Web Services了,所以用得可能太多了,那么最可能是在這個(gè)例子中你可以看到Web Services事務(wù)不完整的現(xiàn)象,當(dāng)一個(gè)We調(diào)用時(shí),有時(shí)我們會(huì)發(fā)現(xiàn)只有一個(gè)數(shù)據(jù)庫(kù)中有數(shù)據(jù)。

2. 構(gòu)造實(shí)現(xiàn)時(shí)使用了SQL 2000的XML特性,盡管向大家展示了SQL 2000的方便特性(Nathan Smith是個(gè)MCSD haha),對(duì)于要使用Oracle,IBM數(shù)據(jù)庫(kù)的需求,也就意味著某種不可移植性,這部分代碼必須重新考慮和寫(xiě)過(guò)。

3. 作為一個(gè)應(yīng)用的核心功能部分,目前完全的Web Services構(gòu)架是過(guò)于單薄和松散,必須考慮Window Services和線(xiàn)程池的實(shí)現(xiàn)來(lái)提升性能,同時(shí)對(duì)程序的構(gòu)架做一個(gè)調(diào)整。

4. 數(shù)據(jù)庫(kù)設(shè)計(jì)不完全,需要再細(xì)化和重新根據(jù)需求進(jìn)行設(shè)計(jì),添加表。記住目前它僅是一個(gè)Demo

5. Nathan Smith把數(shù)據(jù)庫(kù)的連接放在Goalx的文件中,似乎想節(jié)省建立Connection(當(dāng)然這是一種有些糟糕但是省力的作法),在我測(cè)試中發(fā)現(xiàn)負(fù)責(zé)指向第二個(gè)數(shù)據(jù)庫(kù)連接經(jīng)常并沒(méi)有建立,在沒(méi)有自己實(shí)現(xiàn)事務(wù)保證的情況下,它往往是數(shù)據(jù)不完整的主要原因(我已將所有的數(shù)據(jù)庫(kù)連接移到了函數(shù)內(nèi)部),所以根據(jù)可能需要加入可靠的DAL層。

自從1989年Microsoft從Firefly Network購(gòu)買(mǎi)Passport之后,Passport在用戶(hù)數(shù)和功能上不斷的在發(fā)展,1.4版本展示了兩個(gè)大的功能: Single Sign In (SSI)和Express Purchase(EP).2.0版本主要是提供一個(gè)完整的COM接口(很類(lèi)似WinInet API),內(nèi)嵌的界面(embedded Passport UI),更重要的是向基于Kerberos 的Authentication邁進(jìn)??梢灶A(yù)見(jiàn)到未來(lái)的2.1或3.0版本,它會(huì)增強(qiáng)對(duì)IE6、P3P以及WAP、HDML、Microsoft Mobile Explorer、PocketPC等移動(dòng)設(shè)備的支持,更重要的是對(duì)基于XML信息處理的支持(目前的Passport的體系結(jié)構(gòu)中Client、 Participating website 和 Microsoft Passport server像一個(gè)三角形,在SSI或EP時(shí)websit和Passport Server之間并不直接通訊,而是借助Client使用 HTTP查詢(xún)字符串和 HTTP Redirect來(lái)傳遞信息,所有需要存儲(chǔ)的數(shù)據(jù)比如登錄狀態(tài)、用戶(hù)Profile是依賴(lài)于用戶(hù)端的cookie),Passport將成為Hailstorm的關(guān)鍵服務(wù),那么對(duì)XML的支持是必須的,另外和目前已有的Hailstorm服務(wù)之間功能的整合也將是大的挑戰(zhàn),Passport最大的機(jī)遇不是推出它的dotNET版本,而且它如何成為一個(gè)又是中心化驗(yàn)證,又提供個(gè)性化服務(wù)的框架,它正式的推出也將是整個(gè)Hailstorm(.Net My Services)服務(wù)吹響沖鋒號(hào)角的一個(gè)前兆。

無(wú)論外界如何評(píng)論或是如何和自由聯(lián)盟爭(zhēng)斗,“今天的Passport不等于明天的Passport”(李開(kāi)復(fù)語(yǔ)),未來(lái)并不總是一片光明甚至不會(huì)一帆風(fēng)順?!爱?dāng)我們的路通向一個(gè)黑暗的森林,追尋來(lái)時(shí)的腳步是多么困難。當(dāng)路被設(shè)定好,回歸似乎不可能。生命就是我們的契約,除了最高法庭之外,無(wú)人能撤銷(xiāo)它?!?,Passport也是一樣:戰(zhàn)斗需要更多的炮火,時(shí)代早已充滿(mǎn)革命,更好的活著是它最超越的榮耀。

發(fā)布:2007-03-25 10:27    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章: