ASP.NET站点跨子域名单点登陆(SSO)的实现

 

http://blog.csdn.net/jason_dct/article/details/8502075

 

ASP.NET站点跨子域名单点登陆(SSO)的实现

在MSDN的文档“配置跨应用程序的 Forms 身份验证(http://msdn2.microsoft.com/zh-CN/library/eb0zx8fc.aspx)” 中,提出了在Web Farm和多个应用程序之间实现共享身份登陆信息的方法。这个方法实现的其实是场环境下的身份共享,对于跨子域名的单点登陆,如网易和CSDN的通行证的实现,也有很多朋友给出了解决方案,参见:http://www.cnblogs.com/dudu/archive/2005/07/04/186279.html

Form验证其实是基于身份cookie的验证。客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web.config里Authentication节form设定的name信息,如

<authentication mode="Forms">
   <forms loginUrl="login.aspx" name=".ASPXAUTH" path="/" protection="All" ></forms>
 </authentication>

这里,.ASPNETAUTH就是这个Cookie的名字。通过在Request.Cookies集合里包含这个cookie,实现用户身份信息的传递。所以,共享身份验证信息的思路很简单:只要这个身份验证cookie能在自域名中共享,Form验证信息自然可以共享!

共享Cookie的文章网上很多,基本的做法就是设定Cookie的domain属性。cookie的domain指定了此cookie所关联的域。domain默认为String.Empty,表示关联的域是当前Request对应的域。如果domain设定一个子域名,如cookie.Domain="brookes.com",则表示此cookie关联brookes.com下所有的下级域。因此,可以被www.brookes.com/web2.brookes.com......等共享。

至此,实现跨子域名的Form验证信息共享的方法就很简单:

 if (Membership.ValidateUser(userName, password))
          
...{
                FormsAuthentication.SetAuthCookie(userName.Text, 
false);
                HttpCookie cookie 
= Response.Cookies[FormsAuthentication.FormsCookieName];
                cookie.Domain 
= ".brookes.com";
                Response.Cookies.Add(cookie);
                FormsAuthentication.RedirectFromLoginPage(userName,
false);
            }

这个代码说明的是实现的原理。这里,实现的自己写Form验证的过程。如果使用的是Login控件,由framework自己完成验证,怎么设定这个cookie的domain呢?

可以有三种方式:

1. 在Login.OnLoggedIn事件中处理。这个事件在用户通过身份验证后触发,验证cookie已经存在,可以修改其domain属性,代码参考上面;
2. 将验证用户、设定AuthCookie的过程写成一个HttpMoudle。这个方法稍负责,可google代码
3.有一个最最最简单的方法,在.net 2.0 中,Authticainon的forms元素新添了一个属性:domain。这个属性对应的就是form的AuthCookie的domain属性。因此,只需要在每个子域的web.config中作如下设置:

<authentication mode="Forms">
   <forms loginUrl="login.aspx" name=".ASPXAUTH" path="/" protection="All" domain="brookes.com"></forms>
 </authentication>

OK,现在你不需要作任何其他设置了,你的brookes.com下所有的子域都可以共享form验证身份信息了!

还要说明几点:
1. 这个domain属性会覆盖在httpCookie配置节的domain属性设置,但是只会影响到AuthCookie,其他cookie不受影响;
2. 看了上面这一条,当然会想到我可以设定httpCookies配置节,如:
   <httpCookies domain="brookes.com"/>
  效果是一样的。不同指出在于,httpCookies指定了站点内所有cookie的domain属性,这将导致站点内所有的cookie都可以在子域间共享!至于这种共享是需要还是该避免,根据需要具体判断。
3. 这个domain属性,我看到在有的文档里强调在前面加一个点,如domain=".brookes.com",而MS的文档里都没有这个点。根据我的测试结果,两个写法没有区别,效果一样。

 

-----------------------------------------------------------------------------------------------------------------------------------------

1 对于纯web得sso,如果有独立得SSO登陆服务器,所有的验证都跳转到这个服务器的界面,登陆的状态保留在sso server上

2 如果要桌面和web共同认证,还是必须有独立得SSO,

对于自己实现的方案,例如如果是通过一个桌面程序来实现SSO,那么必须有一台SSO服务器,桌面程序通过httpclient验证身份,然后可以通过
a. 修改本机cookies让IE传认证令牌
b. 直接把认证令牌作为url字符串根在桌面程序的一个链接后面

令牌说法比较含糊,具体两种方法:
1 所有得url均复写令牌
2 只要保留浏览器对SSO web server的cookies,跳转应用程序的时候,web app先redirect到ssoserver,验证cookies后,跳回来,对用户来说,感觉不到去过ssoserver,呵呵,

很多网站,例如google好像就是这个方法


jaas本质上只解决一个登录可配置的问题,像tomcat用jaas,只能解决同时登陆tomcat上得N个应用,而且仅限于java,对SSO实现还是要按上面的方法。kerberos往往是和系统一

些模块紧密结合的,扩展不一定方便。


3 如果windows是唯一登录入口,也就是没有第二台SSO登录服务器。
那么实现SSO的核心,就是登录域之后,IE能够把域信息发送给服务端:

  配置IE浏览器
  ①internet选项-->安全-->本地intranet-->站点-->高级
  添加wls
  ②internet选项-->高级-->安全
  确定,集成windows身份认证被选中

服务段的weblogic接收到这个令牌以后,要去AD上验证

集成Windows身份验证(以前称为NTLM身份验证和Windows NT质询/响应身份验证)可以使用NTLM或Kerbetas身份验证,NTLM是Microsoft的一项专有技术,自问世以来已几经更新,

虽然这种机制稳定可靠但它有一个致命缺点是不能进行委派,这就意味着用户凭据不能流动到远程服务(如SQL Server)。而Kerberos却不存在这种问题,在保持稳定安全的验证机

制的同时还可以在Windows环境中轻松地使用委派,我们要讨论的就是这种机制。

Kerberos大多数情况下要求使用Microsoft Active Directory,因为Active Directory 充当Kerberos令牌授予服务(TGS/TGT)。

如果用kerberos,那就很简单了,windows和weblogic都支持kerberos,认证数据都在AD上
参考资料  http://edocs.bea.com.cn/wls/docs92/secmanage/sso.html

 

from:http://www.cnblogs.com/csdnexpert/archive/2007/12/17/999415.html

 

 

-------------------------------------------------------------------------------------------------------------------------------------------

Java SSO参考:http://www.cnblogs.com/hannover/archive/2009/10/15/1583692.html

转载于:https://www.cnblogs.com/8090sns/archive/2013/01/22/2871322.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux实验三makefile,实验平台上Makefile详细的解释

作者&#xff1a;甘老师,华清远见嵌入式学院讲师。# CORTEX-A8 PERI DRIVER CODE# VERSION 2.0# ATHUOR www.linuxidc.com# MODIFY DATE#2013.03.28 Makefile/***(下面的解释将用这个的形式进行标注)写好的源文件,要编译成二进制文件.需要指定工具链的,这里指定我们的工具链是…

python esp8266模块_ESP8266使用笔记之常用固件

开发板使用的是NodeMCU开发板&#xff1a;目录1.学习使用ESP8266官方的SDK1.1使用SDK提供的AT固件1.2使用SDK Build固件2.学习使用NodeMCU固件(上层可使用Lua开发)和MicroPython固件(上层可使用MicroPython开发)学习使用ESP8266官方的SDK使用AT固件&#xff1a;下载开发包&…

基础C#总结

由于在学习c#这段视频是为了辅助设计模式的学习,这部分的内容也和VB的内容很大程度上是一样的.虽然在开始的 时候,有些困难.在接触了一些例子和实验后.理解起来变得顺畅了很多.下面是对c#基础内容的总结.很多内容都在VB中有 过接触,所以都是些基础知识.捋一捋,将这些时间脑子的…

e站app改内置hosts_米家踢脚线电暖器E评测:符合现代家居审美 全屋取暖“小钢炮”...

【科技犬】对于没有集中供暖的长江中下游地区居民而言&#xff0c;电暖器是不折不扣的"保命神器"。而在深秋的北方&#xff0c;昼夜温差较大&#xff0c;这种时候使用灵活、易于搬运的电暖器也成为更加明智的选择。在北方每年的冬季&#xff0c;室内温度就直接关系着…

asterisk libxml2

asterisk 在configure的时候&#xff0c;会去/usr/bin下检查有没有xml2-config这个可执行文件&#xff0c;还回去检查 编译的工具链中有没有libxml2.so这个库文件&#xff0c;即使是交叉编译&#xff0c;/usr/bin下应该也是上位机的xml2-config 而且xml2-config和libxml2.so的…

锐炬显卡可以linux吗,Intel Broadwell桌面CPU性能测试:Iris Pro 6200核显无敌了

Intel已经在Computex 2015发布了Broadwell-H桌面版处理器&#xff0c;分别有Core i7-5775C和Core i5-5765C两款&#xff0c;另有3款BGA封装的嵌入式型号。它们的特色是内置Intel史上最强Iris Pro 6200核显、以及较大的超频空间。这款处理器现在已经解禁&#xff0c;发布了评测&…

经纬度转化为xy坐标系_Arcgis添加经纬度矢量点

今天帮舍友作图&#xff0c;才体会到九边说的。学技术使人清醒&#xff0c;清醒的认识自己能力有限。少去网上怨天怨地&#xff0c;踏踏实实去提升实力。这是她给我的原始数据&#xff0c;一堆经纬度点。首先我们先进行数据去重&#xff0c;当然这一步可以根据自己数据考虑是否…

CSS中class优先级问题

CSS中class样式的优先级&#xff08;或者层叠效果&#xff09;是根据class在<style>或者css文件中定义的顺序比较&#xff0c;而不是根据class应用的顺序&#xff0c;定义越靠后优先级越高&#xff1b;如 <html> <style>.class1{color:red;}.class2{color:bl…

惊群现象

引用&#xff1a;http://www.cppblog.com/isware/archive/2011/07/20/151470.aspx-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------“据说”…

物联网课程学习目标_学习攻略|软件工程统计方法amp;amp;物联网

软件工程统计方法&&物联网任课老师&#xff1a;余松森&#xff0c;葛红课程特点及困难本课程的主要内容涉及统计机器学习方法&#xff0c;以及如何采用Python进行应用实现。同学们在学习中主要遇到以下问题&#xff1a;1、在课程内容方面&#xff0c;课本上的关于pytho…

笨办法学linux dhcp,iptables使用指南(上)

iptables-save用来把当前的规则存入一个文件里以备iptables-restore使用。它的使用很简单&#xff0c;只有两个参数&#xff1a;iptables-save [-c] [-t table]参数-c的作用是保存包和字节计数器的值。这可以使我们在重启防火墙后不丢失对包和字节的统计。带-c参数的iptables-s…

tdk怎么设置_你真的做好网站的标题、描述、关键词(TDK)设置了吗?

SEO其实是个苦活累活&#xff0c;大部分的工作都是在每日不断的坚持与重复。当然也是个细致活&#xff0c;很多的工作都是对一些细节问题的处理。可能平时你没留意到的地方&#xff0c;就是你的网站数据没能上来的原因。比如说SEO的基础设置&#xff1a;TDK。说到TDK(标题、描述…

流言终结者——C语言内存管理

写在前头&#xff1a; 我不能保证此文中&#xff0c;我的观点和理解全是对的&#xff0c;这也不是一篇教学贴&#xff0c;只是我偶尔突发奇想了几个特殊的场景&#xff0c;然后用实验得到结果&#xff0c;对结果进行分析&#xff0c;遂成此文。所以文中肯定存在错误&#xff0c…

mediastreamer2 的简介

原文&#xff1a;http://www.linphone.org/eng/documentation/dev/mediastreamer2.htmlMediastreamer2 是一个功能强大且小巧的流引擎&#xff0c;专门为音视频电话应用而开发。这个库为linphone中所有的接收、发送多媒体流提供处理&#xff0c;包括音/视频捕获&#xff0c;编码…

C# 监控字段_监控交换机选择:千兆/百兆/核心/PoE/光纤交换机选型指南

我们就交换机选型时的四个主要方面讲一下。01选择千兆还是百兆&#xff1f;视频监控系统的网络中&#xff0c;需要传输大量、持续的视频数据&#xff0c;这就要求交换机具有稳定转发数据的能力。交换机接入的摄像头数量越多&#xff0c;流经该交换机的数据量就会越大。我们可以…

python 头条 上传_Python+selenium自动化之文件上传

邮箱的主要功能就是邮件消息的收发阅读&#xff0c;之前的文章写了邮件的查收和编写&#xff0c;本篇介绍邮件的附件上传。还是以腾讯企业邮箱为例&#xff0c;进行实际案例操作。文件上传的实现大体分为两种&#xff0c;一种是input标签&#xff0c;一种非input标签。腾讯企业…

JAVA学习笔记——JAVA基础语法之精华

一、标识符 概念&#xff1a;JAVA里面我们可以给他取名字的&#xff08;变量、类、方法等等&#xff09;就是标识符&#xff1a; 注意&#xff1a;1、标识符只能包含字母、数字、下划线还有美元符号$ 2、只能以字母、下划线和美元符号开头 二、变量 概念&#xff1a;JAVA中储存…

编译mediastreamer2/ffmpeg/linphone(x86平台)

--------------------------在x86环境下编译mediastreamer2的步骤--------------------------------------1&#xff09;编译OGG库 音频编解码 http://www.xiph.org/downloads/ ./configure --prefix/usr --disable-static 2&#xff09;编译SPEEX 音频编解码./configure -…

c语言 行程长度编码,C语言编程题,求大佬帮助,关于数组的。

满意答案6kidf3xhs2017.11.07采纳率&#xff1a;41% 等级&#xff1a;8已帮助&#xff1a;62人2 个关键&#xff1a;2位数字的随机数&#xff1a; a[i] 10 rand() % 90;10位或个位 含5 的 并高于平均值的 数&#xff1a;if (a[i]>ave && ( a[i]%50 || (a[i]/10)…

python多级字典嵌套_使用pythonscsv DictReader创建多级嵌套字典

完全是Python noob&#xff0c;可能遗漏了一些明显的东西。我到处找遍了&#xff0c;还没有找到解决办法&#xff0c;所以我想我应该寻求一些帮助。在我正在尝试编写一个函数&#xff0c;它将从一个大的csv文件构建一个嵌套字典。输入文件的格式如下&#xff1a;Product,Price,…