ASP.NET在不同情况下实现单点登陆(SSO)的方法

第一种:同主域但不同子域之间实现单点登陆

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

<authentication mode="Forms">

<forms loginUrl="login.aspx" name=".ASPXAUTH" path="/" protection="All" domain=".zuowenjun.cn"></forms>
 </authentication>

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

代码实现:

string userData = JsonHelper.ScriptSerialize(user);

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, user.userid.ToString(), DateTime.Now, DateTime.Now.AddHours(4), false, userData);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));//加密身份信息,保存至Cookie
cookie.Domain = ".zuowenjun.cn";
Response.Cookies.Add(cookie);

第二种:虚拟目录的主应用和子应用之间实现SSO

<authentication mode="Forms">
   <forms name=".SSOAuth" protection="All" timeout="60" loginUrl="login.aspx" />
</authentication>

比较重要的两个属性是 name 和protection. 当 protection属性设置为 "All",通过Hash值进行加密和验证数据都存放在Cookie中.默认的验证和加密使用的Key都存储在machine.config文件,我们可以在应用程序的Web.Config文件覆盖这些值.默认值如下:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey=" AutoGenerate,IsolateApps" validation="SHA1" />
IsolateApps表示为每个应用程序生成不同的Key.我们不能使用这个.为了能在多个应用程序中使用相同的Key来加密解密cookie,我们可以移除IsolateApps 选项或者更好的方法是在所有需要实现SSO的应用程序的Web.Config中设置一个具体的Key值:
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" decryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" validation="SHA1" />

第三种:不同域名下的应用程序实现SSO(也适上以上情况)

主要是采用页面URL传参并重定向来实现,这类实现的方法有很多,但可能需要注意的是安全性问题。

其中使用Web service实现SSO,
可参考:http://www.cnblogs.com/wu-jian/archive/2012/11/14/2756694.html

更多相关文章,敬请光临我的个人网站:http://www.zuowenjun.cn

时间: 2025-01-01 13:35:41

ASP.NET在不同情况下实现单点登陆(SSO)的方法的相关文章

新手炒股,什么是止损?什么情况下应该止损?股票止损方法

新手炒股,什么是止损?什么情况下应该止损?股票止损方法止损也叫"割肉".止损是指当某一投资出现的亏损达到预定数额时,及时斩仓出局,以避免形成更大的亏损.其目的就在于投资失误时把损失限定在较小的范围内.其目的就在于投资失误时把损失限定在较小的范围内.股票投资可通过止损把损失限制在一定的范围之内,同时又能够最大限度地获取成功的报酬,换言之,止损使得以较小代价博取较大收益成为可能.止损既是一种理念,也是一个计划,更是一项操作.止损理念是指投资者必须从战略高度认识止损在股市投资中的重要意义,因

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析 ??在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x ?

关于在gridview中有dorpdownlist的情况下使用自带编辑模板的方法

今天记录一下在gridview中,如果有dropdownlist的情况下使用gridview自带编辑模式的方法. 好吧,今天的这个问题有点绕,详细解释一下目的. 因为gridview中的某些列的数据是从basedata里面带出来的,在编辑gridview的时候,user是想手动选择列值,而不是手动输入(输入不对的话,系统会报错),以上是背景. OK,想了想,在gridview中可以这样实现这个功能,用gridview自带的编辑模板,数据呈现用label绑定,数据编辑的时候用dropdownlis

IIS主机在某些情况下无法播放视频的设置方法

默认情况下,Windows Server的IIS主机是不支持FLV文件类型,通过http访问是无法播放视频. MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开. 设置MIME,让IIS支持更多文件类型. 在IIS中添加FLV的MIME类型: IIS里面的站点属性->http头->添加Mime类型 扩展名填写:.flv Mime类型填写:flv-application/octet-stream 重新启动该站点 其它

在本地代理的情况下出现code=-500001的问题解决方法

1 问题起因 一个项目需要用到线上数据,所以抓取qq音乐歌手数据.当然 肯定要写代理的. 代理代码如下 但是我在使用代理的情况下 给我返回 code : -500001 ts : 1542443107469 这说明 你能调用接口但是抓不到数据 2.错误分析 出现code : -500001 ts : 1542443107469 这种错误 一定是你的jsonp里面的字符串参数没配对错误 但是我所有的参数都是对着qq音乐那边搬过来的 应该不可能出现参数没配对成功的情况 以下是qq音乐的参数 在我反复

单点登陆sso实现

需求: 多个bs业务系统,在某个业务系统登陆后,访问其他bs应用系统无需重复登陆. 制约:必须同一浏览器. 解决方案: 关键词:cookie,跨域,sso 环境 l Passport.com 登陆认证服务 l pis.com 病理业务系统 l lis.com 检验业务系统 l  login 拦截器:验证请求是否有令牌,令牌是否合法() l  令牌 ticket 括号内为增强功能 l  用户访问pis.com,拦截器发现无令牌或令牌无效,跳转至passport.com的登陆页面(防止恶意测试密码,

在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法

由于用普通开发者证书,发布的app或ipa没法在普通机器上安装运行,原因是apple限制了普通开发者发布appstore以外的环境中,只有Enterprise企业版证书才能发布inhouse. 今天在发布一款公司内部使用的app时,由于mac中同时安装了 普通开发者证书 和 企业证书,xcode可能默认使用了普通开发者账号,因此发布的ipa始终无法在普通机型中安装成功.几经周折,终于发现了这个问题,于是想办法找到了设置成使用企业版证书,但是这时候连编译都无法通过,错误提示如下: No match

ASP.NET 在IIS7.5下自定义404错误页面的方法

.net 4.0 本机调试时一切正常,配置如下 <customErrors redirectMode="ResponseRewrite" mode="On" defaultRedirect="~/PageStatus/Page_404.aspx">      <error statusCode="404" redirect="~/PageStatus/Page_404.aspx" />

php通过统一发放tickets实现单点登陆SSO功能

站点a,站点b,站点c,分别跨域,站点b当做统一认证中心,站点a,站点c登录请求转发到站点b,站点b当做统一登录,注册中心,也称第三方身份认证中心:用户从不同站点登录到第三方认证中心,完成登录验证后,会生成一个包含用户登录信息的加密key,并且生成多个不同子应用的带加密key的引导页面,用户可以自由选择进入子应用引导页,完成子页面认证,从而无需分别登录子应用的登陆入口了,看效果: 通过a站点登录,登录成功后进入第三方登录引导界面: 通过按钮,附加统一的key,进入a站引导中心 通过按钮,附加统一