Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > My passport 续谈
【标  题】:My passport 续谈
【关键字】:My,passport
【来  源】:http://blog.joycode.com/aspdian/archive/2004/04/26/20286.aspx

My passport 续谈

Your Ad Here

续上次浅谈了一下passport 的实现。在自己的项目中也进行了运用。

就对于开发中发现的问题进行一下说明。

想达到的目的:
 在多个应用系统共享一个用户身份验证系统,而用户在各应用系统中的权限由应用系统自己处理。

主要流程:
 应用程序->当用户访问受限页面 -> 由MyPassport 进行身份验证 -> 用户注册 MyPassport 帐号 -> 登录 MyPassport  -> 返回应用程序 -> 应用程序得到用户信息 -> 分析角色或权限 -> 访问受限页面

主要的类:

MYPassportAuthentication  -- 提供为操作身份验证票提供帮助器实用工具的静态方法
MYPassportAuthenticationModule : IHttpModule - 模块初始化和处置事件
MYPassportAuthenticationEventArgs  : EventArgs  -  事件参数类
MYPassportAuthenticationTicket - 验证票
MYPassportConfiguration  - 配置类
MYPassportConfigurationHandler : IConfigurationSectionHandler  - 配置分配
MYPassportIdentity :IIdentity - 用户验证信息 与 HttpContext.User.Identity 统一

有了上面几个类的设计,就可以进行开发了。
我们选用的数据传送方式是:"查询字符串",即"查询字符串" 做为应用程序间 Ticket 信息的信道

当一个应用程序需要登录时,转向MYPassport 的地址是 : http://mypassport.net/login.aspx?appId=11&ru=http://myapplication.com/somepage.aspx
ru为返回应用程序的地址, 其中的 AppId 为应用程序的ID号,用于当ru 信息丢失时使用。

当完成登录:返回应用程序,地址为: http://myapplication.com/somepage.aspx?ticket=%%^^&&(
这里的ticket 为加密后的票,在返回到 应用程序的 MYPassportAuthenticationModule 时,对request.url 进行分析,把ticket 分离出来,
生成真正的 ticket,取得 用户信息,取得权限。完成注册。

 

一,MYPassportAuthentication 类
 由于 Ticket 在网络上传送时,要对数据进行一下加密。等到达应用程序时再进行解密。得到我们想要的票信息。
 public static MYPassportAuthenticationTicket Decrypt(string strTicket) // 进行解密
 public static string Encrypt(MYPassportAuthenticationTicket ticket) // 加密

 这些都是公共的方法,没有什么好说的。

二,MYPassportAuthenticationModule : IHttpModule
 注册验证事件与处理

  public event MYPassportAuthenticationEventHandler Authenticate; 

  public void Init(HttpApplication context)
  {
   context.AuthenticateRequest +=new EventHandler(OnEnter);
   context.EndRequest += new EventHandler(this.OnLeave);   
  }
 对ticket 进行处理。

 web.config
 <httpModules>
         <add type="MYCom.Security.KK7PassportAuthenticationModule,MYCom.Security"
              name="MYPassport"/>
    </httpModules>

 
三, MYPassportAuthenticationEventArgs
 验证事件参数。当发生验证时,取得用户的MYPassportIdentity 信息

四,MYPassportAuthenticationTicket
 票,
 主要是:用户名,用户基本的信息,与票生成的时间,以及有效期等

五,MYPassportConfiguration 类
 mypassport 的配置类,包含了,passport 站点的地址,应用程序的ID号以及用户程序中那些是受限的页面。

六,MYPassportConfigurationHandler 类
 internal class MYPassportConfigurationHandler : IConfigurationSectionHandler
 {

  public virtual object Create(Object parent, Object context, XmlNode node)
  {
   MYPassportConfiguration config = new MYPassportConfiguration();

   try
   {
    config.LoadValuesFromConfigurationXml(node); //读取配置信息
   }
   catch
   {
    throw new Exception("无法读取 Passport 设定!!");

   }
   return config;
  }
 }

 web.Config 文件:
   
     <configSections>
      <sectionGroup name="Passport">
         <section name="PassportSettion" type="MYCom.Security.MyPassportConfigurationHandler,MyCom.Security">
         </section>
      </sectionGroup>
 </configSections>

   <Passport>
      <PassportSettion AppId="2" passportSite="http://mypassport.net/">
         <AuthPages>
           <location  path="/PostArticle.aspx" User="?"></location>
           <location  path="/PostPoll.aspx" User="?"></location>
           <location  path="/PostReply.aspx" User="?"></location>
           <location  path="/myArticles.aspx" User="?"></location>
           <location  path="/ModifUserInfo.aspx" User="?"></location>
           <location  path="/AddAttachment.aspx" User="?"></location>
           <location  path="/Admin/*.aspx" user="?"></location> <!-- admin 目录下的所有后缀为 aspx 的文件受限 /-->
    <location  path="/DATA/*.*" user="?"></location><!-- data 目录下的所有的文件受限 /-->
         </AuthPages>
      </PassportSettion>
   </Passport>

七,MYPassportIdentity 类
 用户的基本信息。
 protected void MyPassport_OnAuthenticate(Object sender, MYPassportAuthenticationEventArgs e)
  {

   // 对用户进行验证
   MYPassportIdentity passportIdentity  = e.MYPassportIdentity;

   string [] roles = null;
   if (passportIdentity.IsAuthenticated )
   {
    roles = getRoles( passportIdentity); //读取用户权限
   }
   Context.User = new GenericPrincipal( passportIdentity,roles);  //生成一般用户
 }

这样就基本完成了一个passport 系统的的创建,当然只有这些是远远不够的。还有MYpassport 主站的建设工作,应用程序的注册等。
如有什么问题请与我联系。 笑脸


 

BUG.NET :【上一篇】
Sql server 2005 Beta 1 :【下一篇】
【相关文章】
  • How Much Is My Blog Worth?
  • Solaris9下利用mysql认证的pureftp安装配置实例
  • freebsd+qmail+mysql+vpopmail之完全ports安装
  • Postfix邮件系统安装手册(MySQL+IGENUS+TLS+QUOTA)
  • Freebsd postfix with SASL2 mysql courier-imap完全por
  • 数据库基础:SQL导出到MYSQL
  • PHP 5.0 + MYSQL 5.0 + WIN2003
  • Apache2+php4.3.6+MySQL4.0.20+SSL详细配置过程
  • Apache+PHP+Mysql+PhpMyAdmin+IPB实战指南
  • MySQL 3.23.7-alpha中文参考手册
  • 【随机文章】
  • 项目杂感
  • OSPF路由协议综述及其配置
  • 组合关系的分解过程与继承关系的抽象过程的对比
  • SONET/SDH、千兆位以太网、光纤信道收发器的测试
  • 格式
  • 最简单的无盘Windows 98工作站安装方法(1)
  • 几种压缩算法的简单比较
  • C 和 C++ 的矩阵库
  • CuteFTP最新版V4.2.5build3.7.1官方简体中文版 破解(2)
  • 五子棋,人机对战,C语言实现。
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.