Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET入门教程

如何在不同.net版本实现单点登录

来源:中文源码网    浏览:287 次    日期:2024-04-27 00:01:15
【下载文档:  如何在不同.net版本实现单点登录.txt 】


如何在不同.net版本实现单点登录
所谓单点登录(Single Sign On就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。其实对于程序员在技术上要实现就得就是多个不同域名间共享cookie的问题。
最近在为ERP添加一个部署在另一台机器上,链接到原有老系统中的子项目,调用原有老项目中的Login实现单点登录,尝试了N次屡试不成,最后确定问题,是,.net2.0与4.0中对cookie的加密/解密方法由此差异,于是经过研究,重写实现了一个可以在不同.net版本中实现单点登录的简单方法。
1,共用登陆页代码实现:复制代码 代码如下:protected void btnLogin_Click(object sender, EventArgs e){  //认证开票,跳转到原始请求页面 System.Web.Security.FormsAuthentication.RedirectFromLoginPage("ejiyuan", false);}2,配置文件: 复制代码 代码如下: 这里:authentication/forms节点最重要的两个属性是name和protection. 所有实现单点登录的项目都要是相同的配置就这样,才可以在不同程序中同样的保护级别下读写Cookie当 protection属性设置为 "All",通过Hash值进行加密和验证数据都存放在Cookie中.默认的验证和加密使用的Key都存储在machine.config文件,我们可以在应用程序的Web.Config文件覆盖这些值.默认值如下:

IsolateApps表示为每个应用程序生成不同的Key.我们不能使用这个.为了能在多个应用程序中使用相同的Key来加密解密cookie,我们可以移除IsolateApps 选项或者更好的方法是在所有需要实现SSO的应用程序的Web.Config中设置一个具体的Key值:

如果你使用同样的存储方式,实现SSO只是改动一下Web.config而已,必须保证单点中的每个应用程序都有相同的配置,如果单点登录的应用程序是跨不同.net版本的,这里的加密/解密不要使用md5

3,没有登录页的单点登录不需要代码 直接配置就可以了,配置如下复制代码 代码如下: 4,登录模块从定向代码封装在httpModules中供其他系统直接调用,这里附上封装代码与引用方法: 复制代码 代码如下:public class SsoLoginRedirectModule : IHttpModule{ public void Init(HttpApplication i_application) { // TODO: Add UploadModule.Init implementation i_application.EndRequest += new EventHandler(i_application_EndRequest); }
void i_application_EndRequest(object sender, EventArgs e) { if ((HttpContext.Current.Response.StatusCode == 302) && HttpContext.Current.Response.RedirectLocation.Contains(FormsAuthentication.LoginUrl)) { HttpContext.Current.Response.RedirectLocation = FormsAuthentication.LoginUrl + "?ReturnUrl=" + HttpUtility.UrlEncode(HttpContext.Current.Request.Url.OriginalString); } }
public void Dispose() { //throw new NotImplementedException(); }}引用: 复制代码 代码如下:

相关内容