zoukankan      html  css  js  c++  java
  • 基于SAML的单点登录.NET代理端实现方案

    SAML的相关内容就不介绍了,想深究的可以研究下相关的规范,主要写下大体的思路。

    通过SAML实现单点登录的运转过程如图:

     

    此处的ServiceProvider是服务提供者,也就是用户需要访问的应用,IdentityProvider是认证提供者。

    通过上图可以看出,当用户访问一个应用的时候,如果用户没有登陆,那么需要将用户重定向到认证服务,认证服务判断该用户是否已经经过认证,如果没有认证过那么进行认证,然后生成断言响应发送给SPSP负责处理断言,验证用户是否认证通过。也就是说SP进行了请求转发和断言解析两个过程。在.NET中我们可以通过HttpModule来过滤请求,对没有认证的请求进行转发,通过HttpHandler过滤断言请求,对断言进行处理。

    这种方案的好处是,不需要修改既有的应用程序代码,就能够将其集成到单点登录系统中。也就是只要把认证的Dll复制到应用执行目录下,然后配置HttpModuleHttpHandler即可。

     

    示例ModuleHandler如下

        /// <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),如图:

     

    名称随便,类型为:处理类的完整名称(命名空间+类名

    2. 在IIS应用程序中增加HttpHandler,如图:

     

    请求路径为:*/SAML/*

    类型为:处理类的完整名称(命名空间+类名

     

     

  • 相关阅读:
    Google Maps API 进级:通过XML文档加载Gpolyline或者Gpolygon
    Google Maps API 进级: GPolygon对象2
    Google Maps API 进级: GoogleMaps常用事件及应用思路2
    debian下安装JDK
    sudo 提示用户不在sudoers文件错误
    debian关闭开机自动启动时候的gui
    debian解决中文乱码,安装chinese font
    debian下intel 3945abg和T420无线网卡驱动
    debian修改系统时区
    wheezy安装oracle jdk的jdk之中文乱码处理
  • 原文地址:https://www.cnblogs.com/jingtao/p/1988435.html
Copyright © 2011-2022 走看看