在跟exchange集成登陆时,通常有这样的需求,用户需要点击邮件链接的时候直接打开,不再需要输入用户名密码,实现所谓的单点登陆。
登陆原理:用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);
}
},
登陆原理:利用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; //浏览器重转向至OWAbreak;case 401: //状态为:401代表用户名密码不正确,身份验证错误alert("用户无效或密码错误。");break;default: //其它状态,如服务器无法访问alert("对不起,服务器发生错误,请稍后再试!");break;}}以上两种方式各有弊端,第一种无法捕获服务器响应,并且经过多次测试,并不是每次都能直接打开。第二种需要exchenge支持windows认证,并且需要允许脚本跨域读取数据源(仅在IE浏览器可行)。除此之外,需要考虑发送用户名密码时的安全性。