在跟exchange集成登陆时,通常有这样的需求,用户需要点击邮件链接的时候直接打开,不再需要输入用户名密码,实现所谓的单点登陆。

通常有两种方式
1、form认证

登陆原理:用js模拟表单登陆

代码: POSTExchange: function (username,password,url) {

///<summary>

/// 单点登录方法

///</summary>

var page = window.open("xxxx.loginExchange", "1");

setTimeout(function () {

var span = page.document.createElement("span");

span.innerHTML = "正在加载中...";

page.document.body.appendChild(span);

var form = page.document.createElement("form");

form.style.display = "none";

form.action = "http://XXXXX/owa/auth/owaauth.dll";

form.method = "post";

form.innerHTML = " <input name=\"username\" type=\"text\" value=\"" + username  + "\"/>"

+ "<input name=\"password\" type=\"password\" value=\"" + password + "\" />"

+ "<input name=\"destination\" type=\"text\" value=\"" + obj._destination + "\" />"

+ "<input name=\"flags\" type=\"text\" value=\"0\" />"

+ "<input name=\"forcedownlevel\" type=\"text\" value=\"0\" />"

+ "<input name=\"trusted\" type=\"text\" value=\"0\" />"

+ "<input name=\"isUtf8\" type=\"text\" value=\"1\" />"

+ "<input type=\"submit\" value=\"提交\" />";

setTimeout(function () {

page.document.body.appendChild(form);

setTimeout(function () {

form.submit();

setTimeout(function () {

//跳转

if (obj._baseClass._location) {

window.open( url , "1");

}

}, 1000);

}, 1500);

}, 500);

}, 500);

}

},

2、windows认证
登陆原理:利用xmlheeprequest对象,传递用户名密码通过认证
代码:
 function Authen(username, password, url) {
         var auth;
         try {
             auth = new ActiveXObject('Msxml2.XMLHTTP');
         } catch (e) {
             try {
                 auth = new ActiveXObject('Microsoft.XMLHTTP');
             } catch (e) {
                 auth = new XMLHttpRequest();
             }
         }
 
         auth.open('get', url, false, username, password);
         auth.send(null);
 
         switch (auth.status) { //检测auth.send以后的状态,
             case 200: //状态为:200代表用户名密码正确,                
                 window.location.href = url; //浏览器重转向至OWA
                 break;
             case 401: //状态为:401代表用户名密码不正确,身份验证错误
                 alert("用户无效或密码错误。");
                 break;
             default: //其它状态,如服务器无法访问
                 alert("对不起,服务器发生错误,请稍后再试!");
                 break;
         }
     }
 
以上两种方式各有弊端,第一种无法捕获服务器响应,并且经过多次测试,并不是每次都能直接打开。第二种需要exchenge支持windows认证,并且需要允许脚本跨域读取数据源(仅在IE浏览器可行)。
 除此之外,需要考虑发送用户名密码时的安全性。

exchange邮箱的”单点登陆“的更多相关文章

  1. 集成基于CAS协议的单点登陆

    相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...

  2. cas单点登陆。就这一篇就够了!!!!!

    前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...

  3. centos7下ldap+kerberos实现单点登陆

    一. LDAP概念 http://wiki.jabbercn.org/index.php/OpenLDAP2.4%E7%AE%A1%E7%90%86%E5%91%98%E6%8C%87%E5%8D%9 ...

  4. 集成基于OAuth协议的单点登陆

    在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例 ...

  5. Lind.DDD.SSO单点登陆组件的使用(原创)

    回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...

  6. ASP.NET 单点登陆

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...

  7. (原创)AD账户误删导致Exchange邮箱被删 莫苦恼

    由于人员变动,离职人员AD账户和邮箱经常要删除.但是在删除AD账户的时候难免会犯错,将在用的用户给删除了,这是个痛苦的事情, 然后你会发现Exchange邮箱也会跟着删除,抓狂了..,还好,幸亏这里进 ...

  8. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  9. ASP.NET在不同情况下实现单点登陆(SSO)的方法

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...

随机推荐

  1. mysql保存emoji表情(微信开发用户昵称..)

      java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at c ...

  2. Chrome 开发者工具详解(4):Profiles 面板

    概述 当前使用的Chrome最新版为54.0.2840.71,这个版本的Profiles面板比之前提供的功能更多也更强大,下面是该面板所包含的功能点: Record JavaScript CPU Pr ...

  3. hadoop下载

    1.输入网址: http://mirrors.cnnic.cn/apache/hadoop/common/ 2.选择需要的版本进行点击下载

  4. Byte、KB、MB、GB、TB、PB、EB是啥以及它们之间的进率

    它们是存储单位 因为计算机存储单位一般用B,KB.MB.GB.TB.PB.EB.ZB.YB.BB来表示,它们之间的关系是: 位 bit (比特)(Binary Digits):存放一位二进制数,即 0 ...

  5. C++----练习--string 从文件中一个一个单词的读直到文件尾

    从文件中读取单词.并每行显示一个: 1. #include<iostream> #include<string> #include<vector> int main ...

  6. 谈一谈JVM内存JAVA_OPTS参数

    最近几个月,做的性能测试项目中,发现了一些内存方面的问题,其中有涉及到对JBOSS里的JAVA_OPTS配置,例如一下所示: JAVA_OPTS="-server -Xms1536m -Xm ...

  7. mysql死锁——mysql之四

    1.MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 In ...

  8. MySQL库目录下db.opt文件的作用

    细心的朋友可能会发现有时候在某些库目录下有个 db.opt 文件,那这个文件是干什么用的呢?如果你用vi等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的.也就是说如果 ...

  9. 转:ReportViewer控件使用方法

    a. ReportViewer关联Report1.rdlc的简单呈现b. 对带有报表参数的Report1.rdlc的呈现c. 利用程式生成的DataSet 填充报表d. 调用存储过程 生成DataSe ...

  10. Linux系统编程(15)——shell脚本语法

    Shell字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号 s ...