设为首页 收藏本站
查看: 1117|回复: 0

[经验分享] Exchange"单点登陆"

[复制链接]

尚未签到

发表于 2015-9-10 12:36:41 | 显示全部楼层 |阅读模式
我这里的单点登陆指的是在.net应用程序中,进入EXCHANGE的OWA,不用再进行windows身份验证.
   Windows2003的Azman,还有其他一些东西,一个很重要的特征就是安全方面采用AD,结合NTLM等来进行安全与权限方面的验证.例如.net remoting,及安全方案的标配就是远程对象集成到IIS,通过配置web.config来设置权限或控制访问资源等.于是用数据库模拟的方式就比较郁闷点了,需要实现自定义的标识流,在Azman中,还要自定义安全上下文,麻烦挺多的.这是题外话.
   Exchange这东西,每次都是可能要用,或者准备用的时候,猛的上去刨一两天,很多时候都是尽量以解决问题为主了.SDK和E文的资料都看得很粗略.要实现单点登陆,大体上是采用webdav,通过xmlhttp来实现.
"
    在服务器端配置好SSL安全通道,以启用安全通道;关于如何配置SSL安全通道,请参阅 http://support.microsoft.com/default.aspx?scid=kb;EN-US;218445 将OWA的认证方式设为“Windows集成身份验证”,不要设为“基于表单的身份验证”(使用Exchange系统管理器);
  • 使用xmlhttp对象发送访问请求,脚本代码如下:
  
//jeseeqing 2004.10.28
//exchangeURL: for example https://VirtualAD.ExchangeTest.Com/Exchange/jeseeqing
  //userName:user name
//password: user password
  function RedirectExchangeURL(exchangeURL,userName,password)
  {
  var xmlRequest= new ActiveXObject("msxml2.xmlhttp");;
  xmlRequest.open("get",exchangeURL,false,userName,password);
  auth.send();
  
  switch(auth.status)
  {
  case 200:
  window.location.href = exchangeURL;
  break;
  case 401:
  alert("Invalid user or password。");
  break;
  default:
  alert("Sorry, Exchange Server is busy, please try later!");
  }
  }

  • 增加一个ASPX页面,在页面的Page_Load事件中注册此脚本,并且传入指定的参数,则会自动跳转到指定的Exchange页面中。 "
以上援引自jeseeqing's technology roadmap      
网址:http://www.cnblogs.com/jeseeqing/archive/2004/11/09/61881.html
  具体做的过程中,却是很郁闷的,首先关于配置SSL一块,其实在OWA中,要修改密码也是必做的工作,我嫌麻烦,省掉了,反正大不了弹出一个需确认的提示框,重要的是先搞明白XMLhttp实现的过程再说. 据小弟回报,配置完认证一块,也就可以在OWA中修改密码了。(该小弟在偶的压迫下,EXCHANGE的配置都精通了)
至于第二步,一般EXCHANGE默认的是windows集成验证,倒是论坛里很多人问如何使用基于表单的验证.
    接着就是代码了,这段是用JSCRIPT写的,先创建一个xmlhttp的实例,然后使用OPEN方法,到auth.send()就出问题了,哪来的auth对象?这里应该是定义一个对象取请求的返回值的.用google又找到几篇和上面一模一样的文章.吐血!C#的例子中是通过发送xml请求实现对EXCAHNGE操作的,xmlhttpClass也有send方法,干脆先将其改为xmlRequest.send()试试再说,就是不知道怎么取得返回的状态值了.
    最后注册脚本,我又迷糊了,Page的方法里有一些注册脚本的,看了几个方法,大致也就是相当于把脚本输出到页面中,干脆直接在HTML页面上写脚本,
    <script language="JScript">   
  var xmlRequest= new ActiveXObject("msxml2.xmlhttp");;
  xmlRequest.open("get",exchangeURL,false,userName,password);  
xmlRequest.send();
window.location.href=excahngURL;
  </script>
稀里糊涂就成功了,如果在Page_load事件中,应该就是将上面的脚本和取得的路径,用户名,密码连接成字符串,然后使用Page.RegisterScriptBlock方法注册就ok了.
偶在C#下的处理:



DSC0000.gif     public void LoginExchange(Page page)
DSC0001.gif DSC0002.gif          DSC0003.gif {
DSC0004.gif             string url=ConfigurationSettings.AppSettings["ExchangeServer"];
            string user=User.Identity.Name;
            string pwd=Session["pwd"].ToString();
            StringBuilder StrScript = new StringBuilder();
            StrScript.Append( "<script language=javascript>" );
            StrScript.Append("function GoToEmail(){");
            StrScript.Append( "var auth = new ActiveXObject(\"microsoft.xmlhttp\");");
            StrScript.Append( "auth.open(\"get\",\""+url+"\",false,\""+user+"\",\""+pwd+"\");");
            StrScript.Append("auth.send();");
            StrScript.Append( "window.open( \""+url+"\");" );
            StrScript.Append( "}</script>" );
            if ( ! page.IsStartupScriptRegistered( "LoginExchange" ) )
DSC0005.gif DSC0006.gif             {
                page.RegisterClientScriptBlock("LoginExchange",StrScript.ToString());
               
DSC0007.gif             }
DSC0008.gif         }
页面中在连接前加:就OK了。原本是将上述代码写成了函数,在LinkBotton的onclick事件中调用,但这样页面会刷一次,很难看。最后还存在的问题是,处理到xmlRequest.open("get",exchangeURL,false,userName,password)时,会报JAVASCIPT错误,原因是没有权限。原来EXCHANGE用的是域模式,而在默认的IE设置中,通过域访问数据资源是禁止的。除了改设置,暂时没有好办法解决。2005年8月21日修订。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111952-1-1.html 上篇帖子: 使用EWS访问Exchange邮件 下篇帖子: 读取exchange邮件的未读数(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表