web
Passport 你的网站 (上)
-------(在你的WebSite上实现MS Passport )
小气的神 2001-11-12
Article Type: In-Depth
难度等级:4/9
版本:1.01
Passport 最早出现在1999年,当时只是为满足MS收购HotMail后作为邮箱的登录和授权服务,默默无闻。一年之后人们开始知道它了,真正引起争议的是MS在Hotmail张贴的一例用户使用条款,被认为侵犯个人的隐私和权利,事实上当时MS Messenger开始被人关注,而使用Messager的前提是你必须拥有一个Hotmail或MSN的Mail帐号,这一刻Passport开始展露头角。
接着 MSN Explorer 6.0正式为Passport正身,MS Messenger也接连不断的升级,一口气到了4.0。MS开始把Passport推上前台,不过那一时刻还很难把Passport和dotNET、WebService扯上关系。2001年7月13日,MSN的Hotmail网站更新,一切焕然一新,美丽的Web UI让人叹服,我开始感叹中国的Web Mail什么时候能做到这么漂亮。实际上, Passport 2.0 也在这之前Release,这是Passport的一次最重要的升级。同时人们开始从dotNET的迷幻中睁开眼睛,除了Visual Studio.NET,MS表明Passport将是dotNET的最早的一个实现,Passport已频繁出现在主要的技术报刊和杂志上,Passport已经和dotNET挂上了钩,不过怎么看也看不出来Passport会和dotNET有关,这其间MS已悄悄将Passport的database扩大了几次,做好各种技术上的准备了。
三个月后XP发布,PDC 2001召开,Visual Studio.NET Beta2 Release ,WebService已经蓬勃发展深入人心,一切突然清晰起来,15天以后MSN Explorer 7.0发布,MSN主站点迎来了近两年多的一次大改版,开始有评论认为发生变化了,有人已从MSN嗅出一种奇特的气味,这次改版改变到根了,MSN Explorer宣称可以和MSN网站真正的同步并且成为一个最美丽的Client,MSN Messenger让人新奇的发现Actions Plane,不久HailStorm被改称为Microsoft .NET My Services,Passport脱离HotMail,Messenger成为Microsoft .NET My Services的一员,MS表明今后所有Microsoft .NET My Services的关键是Passport,它将是所有Web站点和WebService的唯一的一种登录方式,而且未来它将会被发展成一个全球化用于授权的电子商务平台。几乎一夜之间MS所有的相关网站赫然出现Passport的WebUI,EP标志也出现在近160家的电子商务网站上。这时Passport用户已超过165,000,000个。
就在不久我也Download Passport SDK 2.0,我认为使用它很方便,作为一个开发者来说,把自己的网站实现Passport只需很简单的几步,并且对于用户来说无论是授权还是验证都会感到无比的熟悉和容易,他们会喜欢自己在某个网站上可以不需要填写太多的表格而完成一个交易或体验,就我各人来说,作为一个用户唯一的不便是我必须拥有一个MS的Passport帐号,如果能排除突起的那一点不服气心理,对于我那一点点的隐私是填写给MS还是Sun或是任何一个Web网站没有太大的不同;作为一个开发人员,我已厌烦了中国那些所谓的“网络安全应用方案提供商”的网络安全实现。老实说,我不能直接拒绝这些解决方案并大声的说NO,而另一方面我又很难说服自己我去喜欢它。
好吧,原谅我似乎离题太远了。让我们准备一下开始吧:
1。准备好我们的环境。
2。实现一个简单的Passport
3。切换并接触一下Microsoft .NET My Services Manager。
1. 准备环境
我的环境:
Windows 2000 Advanced Service SP2 En
IIS 5 保证有一个站点可以访问。
Microsoft Passport SDK 2.0
MS Visual InterDev 6.0 或任何的ASP编辑器
网卡或Modem 必须保证你的机器可以联线访问Internet .
拥有一个真实的Microsoft Passport,最好试 @msn.com的
Microsoft Passport SDK 2.0可以去下面的网址获得。
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/001/644/msdncompositedoc.xml&frame=true
NT4 ,IIS4 可以使用Microsoft Passport SDK 1.4
http://download.microsoft.com/download/iis50/Install/PPSDK1_4/NT45/EN-US/PPM_SDK_v1-4-2.EXE
W2K,IIS5 最好使用Microsoft Passport SDK 2.0
http://download.microsoft.com/download/Passport/Install/2.0/NT5XP/EN-US/PPM_SDK_V2.EXE
然后可以安装SDK,之后你需要建立一个Preproduction environment(PREP)。
先去http://current-register.passporttest.com/default.asp 登记获得一个PREP Passport ,然后你可以去http://current-login.passporttest.com/看是否可以登录成功。这个Passport不是真实世界的,当你登录一个真实世界的网站比如www.msn.com那么实际上你是登录到http://login.passport.com 而在PREP下实际上你登录的可能是http://current-login.passporttest.com/ 这是PREP Login server的地址。至于你如何控制你的用户在这两个地址直接切换将在Passport Administration Utility中进行设置,当然如果以后你知道也可以在注册表中直接进行修改。
然后需要检查作为你的客户端的IE或浏览器,最好是IE5以上,并且在选项中设置使用Cookies和SSL 并且支持javaScript.
更具体的你可以参看Microsoft Passport SDK 2.0文档:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dndotnet/html/myservpassp.asp?frame=true
整个设置和dotNET环境可以没有一点关系,所以不需要任何dotNET的安装或相关文件。
之后可以启动Passport Administration Utility看到像下面这样。
2. 实现一个简单的Passport
简单的实现一个Passport,只用使用两到三个函数IsAuthenticated, LoginUser , LogoTag2, FromNetworkServer 等等。
比如MyPassport.asp :
<%
Dim oMgr, TimeWindow, ForceLogin, rURL
Set oMgr = Server.CreateObject("Passport.Manager")
thisURL = "http://" & Request.ServerVariables("SERVER_NAME") & _
Request.ServerVariables("SCRIPT_NAME")
If oMgr.FromNetworkServer Then
Response.Redirect(thisURL)
End If
If oMgr.HasTicket Then 'just doing basic auth; any ticket is accepted regardless of age
' signout uses a different site-global URL, assumes that this URL exists ...
rURL = Server.URLEncode("http://" & Request.ServerVariables("SERVER_NAME") & _
"/myPassport/loginOut.asp")
Response.Write("欢迎你,你已登录!")
'Will display sign-out link.
Else 'no Ticket, tell them to click Sign In
rURL = Server.URLEncode(thisURL)
Response.Write("请登录")
'Will display sign-in link.
End If
'未登录显示 Sign In 的Logo否则会显示 Sign out 的Logo.
Response.Write(oMgr.LogoTag2("www.ccBoysvr.com"))
%>
基本逻辑是先判断是否已经登录,如果没有登录显示登录并处理登录,否则显示Sign Out按钮。
如果 oMgr.IsAuthenticated () 那么
显示 "欢迎 " & oMgr.Profile("Nickname")
否则
oMgr.LoginUser "登录成功的返回URL"
SDK 文档中会有涉及到:
Implementing .NET Passport Single Sign-In
(网站上比较常用的登录方式的实现)
Implementing Kids Passport
(连小孩子都考虑到了,不过此举比什么浏览器内容分级更好一些,可以针对专门的客户群,MS这一点真的很领先,考虑周到)
Express Purchase Implementation Guide
(EP最近被发现有漏洞,刚关闭后正在修复,虽然中国的国情不同,但是在外国EP最近发展的很不错,中国都已加入WTO了,这方面要加快哦。)
.NET Passport Cobranding Overview
(有关登录时,如何定制登录界面的公司brand的,下面第三点我们会看到一些)
另外Specific Implementation How-tos 这一节一定不要放过,是否能够理解标志着你掌握Passport的深度(个人观点)。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ppsdk21/Implementation/Passport_Implementation.asp
结束这一小节前我附上一张更容易理解Passport的图片,也许通过图你能更好的理解Passport本身:
When a user requests a secured page from a site using Passport, the site redirects the user to a Passport server for authentication. Once the user has been authenticated, he or she is sent back to the calling site. All communications between the Passport site and participating sites go through the user's browser, using encrypted cookies and query strings.
(图片出处www.vbpj.com 作者:Jon Rauschenberger Email:jrausch@claritycon.com)
我感觉中Microsoft Passport SDK 2.0文档已经是很齐全和详细,所有的步骤和细节都有写进去,如果我写得多了,就有摘抄的嫌疑了(haha),唯一有一点不好就是本地安装的SDK居然没有这个文档,所有的文档和帮助都必须去MSDN的网站看(多么可恶,难道不要电话费吗?)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ppsdk21/Implementation/Passport_Implementation.asp