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

推荐订阅源

SecWiki News
SecWiki News
量子位
The Cloudflare Blog
美团技术团队
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
博客园 - 司徒正美
宝玉的分享
宝玉的分享
T
Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
T
Threat Research - Cisco Blogs
Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
博客园 - 聂微东
A
Arctic Wolf
I
Intezer
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
小众软件
小众软件
T
Tailwind CSS Blog
The Hacker News
The Hacker News
L
LINUX DO - 最新话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
TaoSecurity Blog
TaoSecurity Blog
Project Zero
Project Zero
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cloudbric
Cloudbric
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V2EX - 技术
V2EX - 技术
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog

博客园 - Chep

招聘 dotNet c# asp.net 、Windows Mobile 、iPhone 开发人员,工作地上海 iblogs博客程序1.0版 求一问题的解决方法 .TEXT 修改 二 - Chep [转载]防止盗链下载问题 微软.net精简框架常见问题及回答(中文版) 对.text的修改(1) 博客RSS 使用完全手册 主流 Blog 程序 添加 免责声明 Gif 文件格式译解 Visual Studio.Net鲜为人知的技巧 DotNet 网上资源 gif 文档 .net学习:显示/播放Gif动画 在.NET中实现彩色光标和自定义光标 创建基于 Microsoft .NET Framework 精简版的动画控件 Windows Mobile-一个新时代的开始 关于更新blog
关于跨站验证
Chep · 2005-02-22 · via 博客园 - Chep

http://www.cnblogs.com/windsails/archive/2004/10/15/52818.aspx

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

       如何可以将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的目标的答案已经出来了

例子代码下载