惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
V
V2EX
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
F
Full Disclosure
Y
Y Combinator Blog
V
V2EX - 技术
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
SecWiki News
SecWiki News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
量子位
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
K
Kaspersky official blog
B
Blog
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - 风前絮~~

回来啦 Rainbow分页解决方案 FTB2.0和CuteEditor的一些问题 testFTB2.0 testCuteEditor 看看MS内部对.NET的使用情况... base想到... 多个Main函数的应用程序 - 风前絮~~ - 博客园 伟大架构师的秘密 权限管理越来越复杂 Server的Transfer和Response的Redirect FreeTextBox实现机制 FreeTextBox的ToolbarButton整理 Testing vs Debugger 稍不留神产生代码垃圾 C#中"is" vs "as" - 风前絮~~ 再比较动态调用代码 .NET建议使用的大小写命名原则 using的几种用法
ASP.NET跨应用程序进行登录的解决
风前絮~~ · 2004-10-15 · via 博客园 - 风前絮~~

最近一个朋友问我一个问题:

       如何可以将ASPdotNET Forum2.0放到他的一个项目中(好象网上也有人讨论过如何将dotText和ASPdotNET Forum等开源项目集成起来的),他原来的项目已经有一套用户登录机制了,而且用户数据库也是现成的,如何使得在他原来系统上登录后就可以直接转到Forum上,而又不需要再次输入用户信息呢?刚开始感觉a piece of cake...象这种一次登录,然后可以访问多个应用其实在很久就已经提出来了,在几年前还帮公司做过一个类似的产品原型,但那个是针对异构网站的,说白了就是做一个代理,只是内部有套机制将后面的几个异构网站的用户数据库映射起来而已。这种方式看起来似乎可以解决问题,但数据库之间的映射关系处理起来很麻烦,如果下面应用多了的话,工作量是很大的。

        对于这种技术,似乎有个名词叫Single Sign On,有点象网易的通行证了。如果内部网站是同一批人做的倒问题不大,只要协调好了这个通行证的格式和一些相关的问题就可以了。而朋友的情况似乎也没有那么复杂,他原来的项目也是用.NET平台技术的。.NET平台下是否有比较好的整合解决方案呢?


这自然涉及到了.NET平台下验证的相关问题了。ASP.NET自身已经支持三种验证方式(不包括None):
1. Windows身份验证,新建立一个Web应用,似乎缺省就是用这样的方式的。显然这个不是需要的。
2. Passprot身份验证,需要Microsoft支持,它其实提供了一个WebServices来帮助你统一完成验证工作,使   用这个在内部 网项目中似乎没有太大必要。
3. Forms身份验证,通过Cookie来传递身份验证信息,看起来类似通行证之类的,应该是要找的东西了。

图是Forms身份验证的数据流程图(MSDN中的)

       上图十分清晰的描述了Forms身份验证的基本原理,但是对于多个应用呢?仔细查MSDN(MSDN真的好多资料啊,经常看过了再想翻回去已经忘记在那里找出来的了   BTW:有没有MSDN书签功能的?),发现相关的描述很多,但只有一个“跨应用程序进行Forms 身份验证”比较具体,而内容就简单些了。

看来还是需要自己先动手做个简单的测试来边试边查资料了...


先建立一个testLogon的Web应用
主要文件包括:
default.aspx (通过验证跳入的页面)
test1.apsx   (登录的页面)
Global.asax 
Web.config   (配置文件)

再建立另外一个testLogon2的Web应用
主要文件:
default.aspx (通过验证跳入的页面)
Global.asax
Web.config    (配置文件)


测试最终达到的效果:
两个Web应用的default都是受保护的,没有通过验证是不可以进入的,即使在输入访问地址URL,会自动跳转到testLogon\test1.aspx要求登录,当登录通过后,则可以任意在两个应用的default.aspx跳转。
testLogon\default.aspx中有Logout的功能,Logout后则需要重新登录了。


要达到这个效果,基本设置需要:
1.将IIS配置为允许匿名访问,保证可以通过IIS来控制传递请求给ASP.NET;
2.如果必要传输过程配置为SSL,这里没有这个必要了;
3.对应的两个应用的配置文件必须设成一致;

以上这些基本设置在MSDN中都可以找到相关的描述,但是实验这个效果到成功却花费了比预计长的时间,因此觉得十分有必要将其记录下来,对自己对他人都有好处。

得到的经验教训如下:
1.配置文件Web.config中,将验证模式设为Forms,而且在下面的参数中,要保证两边一致
testLogon的Web.config对应部分

testLogon2的Web.config对应部分


2.<machineKey>的增加是必须的
为保证两边两边应用对cookie的处理和读取一致,这个属性是必须的,且要相同

3.

MSDN虽然要查,但不可以完全依靠,特别是代码
在MSDN中,关于machineKey的代码如下:

但显然有着错误的,大家编译一下就知道了,格式错了,而且isolateApplication也不是这样用的

4.为保证两边读到的cookie一致,不要用isolateApplication,它使得各自用自己的cookie了。

5.关于Global.asax的注意,对于Web.config中authentication的节点会触发Global.asax中的事件的,对应

函数是

protected void Application_AuthenticateRequest(Object sender, EventArgs e)


6.研究一下ASPdotNetForum2.0代码发现,Global.asax不见了,而在它的配置文件中多了一项


是的,看一下ForumsHttpModule的源码,结构和Global.asax基本一样,一样有个事件触发函数

 private void Application_AuthenticateRequest(Object source, EventArgs e) 

       下面不用我多说了吧?具体该如何做到和dotNetForum一起达到SSO的目标的答案已经出来了

例子代码下载