基于SAML的单点登录.NET代理端实现方案
2015-01-07 16:03
316 查看
SAML的相关内容就不介绍了,想深究的可以研究下相关的规范,主要写下大体的思路。
通过SAML实现单点登录的运转过程如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821384175.jpg)
此处的ServiceProvider是服务提供者,也就是用户需要访问的应用,IdentityProvider是认证提供者。
通过上图可以看出,当用户访问一个应用的时候,如果用户没有登陆,那么需要将用户重定向到认证服务,认证服务判断该用户是否已经经过认证,如果没有认证过那么进行认证,然后生成断言响应发送给SP,SP负责处理断言,验证用户是否认证通过。也就是说SP进行了请求转发和断言解析两个过程。在.NET中我们可以通过HttpModule来过滤请求,对没有认证的请求进行转发,通过HttpHandler过滤断言请求,对断言进行处理。
这种方案的好处是,不需要修改既有的应用程序代码,就能够将其集成到单点登录系统中。也就是只要把认证的Dll复制到应用执行目录下,然后配置HttpModule和HttpHandler即可。
示例Module和Handler如下:
/// <summary>
/// HTTP Module 处理所有Http请求
/// </summary>
public class SPDispatcherFilter : IHttpModule
{
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
/// <summary>
/// 在session创建完成后处理请求
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
//如果还没加载过配置信息,那么进行加载
if (!ConfigInfo.HasLoadMetaData)
MetaData.Load(app.Request.PhysicalApplicationPath + ConfigurationManager.AppSettings["MetaDataPath"]);
//处理http请求
if (HTTPUtils.HandleRequest(app.Context))
app.CompleteRequest();
}
}
/// <summary>
/// Http Handler 处理SAML请求
/// </summary>
public class SPDispatcherHandler:IHttpHandler,IRequiresSessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HTTPUtils.HandleRequest(context);
}
}
配置方式如下:
1. 在IIS应用程序中增加模块(Module),如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821442555.jpg)
名称随便,类型为:处理类的完整名称(命名空间+类名)
2. 在IIS应用程序中增加HttpHandler,如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821402135.jpg)
请求路径为:*/SAML/*
类型为:处理类的完整名称(命名空间+类名)
通过SAML实现单点登录的运转过程如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821384175.jpg)
此处的ServiceProvider是服务提供者,也就是用户需要访问的应用,IdentityProvider是认证提供者。
通过上图可以看出,当用户访问一个应用的时候,如果用户没有登陆,那么需要将用户重定向到认证服务,认证服务判断该用户是否已经经过认证,如果没有认证过那么进行认证,然后生成断言响应发送给SP,SP负责处理断言,验证用户是否认证通过。也就是说SP进行了请求转发和断言解析两个过程。在.NET中我们可以通过HttpModule来过滤请求,对没有认证的请求进行转发,通过HttpHandler过滤断言请求,对断言进行处理。
这种方案的好处是,不需要修改既有的应用程序代码,就能够将其集成到单点登录系统中。也就是只要把认证的Dll复制到应用执行目录下,然后配置HttpModule和HttpHandler即可。
示例Module和Handler如下:
/// <summary>
/// HTTP Module 处理所有Http请求
/// </summary>
public class SPDispatcherFilter : IHttpModule
{
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
/// <summary>
/// 在session创建完成后处理请求
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
//如果还没加载过配置信息,那么进行加载
if (!ConfigInfo.HasLoadMetaData)
MetaData.Load(app.Request.PhysicalApplicationPath + ConfigurationManager.AppSettings["MetaDataPath"]);
//处理http请求
if (HTTPUtils.HandleRequest(app.Context))
app.CompleteRequest();
}
}
/// <summary>
/// Http Handler 处理SAML请求
/// </summary>
public class SPDispatcherHandler:IHttpHandler,IRequiresSessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HTTPUtils.HandleRequest(context);
}
}
配置方式如下:
1. 在IIS应用程序中增加模块(Module),如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821442555.jpg)
名称随便,类型为:处理类的完整名称(命名空间+类名)
2. 在IIS应用程序中增加HttpHandler,如图:
![](http://pic002.cnblogs.com/images/2011/15230/2011031821402135.jpg)
请求路径为:*/SAML/*
类型为:处理类的完整名称(命名空间+类名)
相关文章推荐
- 基于SAML的单点登录.NET代理端实现方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- 基于.Net的单点登录(SSO)实现解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- 基于.Net的单点登录(SSO)实现解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- 基于.Net的单点登录(SSO)解决方案(简易方案以及后续更新成熟方案)
- .NET基于Redis缓存实现单点登录SSO的解决方案[转]
- .Net环境下基于Ajax的MVC方案
- 基于.Net平台应用程序唯一运行实例实现(抄来的)
- 通过多线程为基于.NET的应用程序实现响应迅速(3)
- .Net环境下基于Ajax的MVC方案
- 单点登录系统的设计与实现方案
- .Net环境下基于Ajax的MVC方案(1)
- 一种基于 SOA 的应用程序的动态实现框架方案
- 通过多线程为基于.NET的应用程序实现响应迅速(4)