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

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

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

申請免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

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

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

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

下面將是一個Passport的實現(xiàn)(我猜是最小的一個框架),它的最初是Nathan Smith (nathan_y_smith@hotmail.com )示范性的一個dotNET β2的版本,調(diào)試時我進(jìn)行了一些小的改動(不少改進(jìn)吧,但主框架沒動),并且添加了一個簡單的測試前端。在我升級到dotNET 1.0后,重新測試了它,所以它需要的環(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è)計兩個數(shù)據(jù)庫:PassportSvr , PassportClient

PassportSvr:


 

PassportClient:


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

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)用實現(xiàn):

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

看得出來最終提供給用戶使用的只有7個函數(shù),當(dāng)然開始時你可以在調(diào)試Services WebServices時測試一下RegisterService函數(shù),它將建立一個Services,記下services_name和 services_password ,在實現(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;

}

整個實現(xiàn)中有個與Passport相似的安全機(jī)制-Ticket,當(dāng)用戶通過驗證之后獲得一個AuthenticationTicket并產(chǎn)生一個Token,我認(rè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;

}

好了解決了主要問題,后面的實現(xiàn)的就迎刃而解了,下面分別是兩個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端用的接口很簡單和明了,(這是又一個不錯的亮點(diǎn))如果一切OK,那么你點(diǎn)擊RegisterAccount,輸入需要的數(shù)據(jù),如果正確那么返回下面的結(jié)果:

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

 


 

結(jié)論:

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

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

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

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

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

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

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

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

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