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

[经验分享] moss和exchange 2007的sso

[复制链接]

尚未签到

发表于 2015-9-11 08:36:29 | 显示全部楼层 |阅读模式
moss版本:2007
      exchange版本:2007
      开发工具:vs2008
      最近一直在做基于moss的应用开发,有这样一个需求。
      因为客户同时上了exchang2007,想在moss网站上显示exchange邮箱信息,这方面可以通过moss自带的owa webpart来配置实现,但是客户又说了既然登录了moss,就不要登录exchange了吧(因为自带的owa webpart还需要用户输入用户名和密码)。那就需要sso了,这里我们就借助moss的sso。moss的sso只是帮助用户存储应用和应用对应的用户名/密码,例如存储了需要sso的应用包括gmai,163mail,应用名/用户名/密码包括gmail/zhangsan/zhangsan,gmail/lisi/lisi/,163mail/zhangsan/zhangsan,163mail/lisi/lisi,然后张三需要登录gmail的时候就会从应用gmail下面查找有无zhangsan的信息,如果有就取出来存储的张三的gmail的用户名和密码,然后我们自己post到gmail去,实现单点登录。至于具体的配置我就不详述了,网上很多,可以参考 http://blog.iyunv.com/RainyLin/archive/2009/05/20/4204491.aspx
      http://microsoft.cnfan.net/sps/3333.html
      我这里给出的是一些代码,首先是我们post数据的html页面。思路是我们通过一个html页面post数据到exchange的http://mail.moss.com/owa/auth/owaauth.dll,因为你会发现owa/auth下面的logon.aspx页面就是post数据到owaauth.dll去处理的,所以我们也post到这个dll处理。同时注意这个文件的输入框的name要和他的logon.aspx页面一致。
      
DSC0000.gif DSC0001.gif owaredirect.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;CHARSET=utf-8">
    <meta name="Robots" content="NOINDEX, NOFOLLOW">
    <title>Microsoft Exchange -Outlook Web Access</title>
    <script type="text/javascript">
<!--
        function getParameter(queryString, parameterName) {
            //alert("queryString:"+queryString);
            //alert("parameterName:"+parameterName);
            var parmeterName = parameterName + "=";
            if (queryString.length > 0) {
                begin = queryString.indexOf(parameterName);
                if (begin != -1) {
                    begin += parameterName.length + 1;
                    end = queryString.indexOf("&", begin);
                    if (end == -1) {
                        end = queryString.length;
                    }
                    return unescape(queryString.substring(begin, end));
                }
                return "null";
            }
        }
        function SetParams() {
            var queryString = window.location.search.substring(1);
            logonForm.username.value = getParameter(queryString, "l");
            logonForm.password.value = getParameter(queryString, "p");

            //logonForm.username.value="administrator";
            //logonForm.password.value="cds323458@2008";

            //alert(logonForm.username.value+"\t"+logonForm.password.value);
            window.document.logonForm.submit();
        }
-->
    </script>
</head>
<body onload="SetParams();">
    please wait DSC0002.gif
    <form action="http://mail.moss.com/owa/auth/owaauth.dll" method="post" name="logonForm"
    autocomplete="off">
    <input type="hidden" name="destination" value="http://mail.ucs.cds.gfdx.mtn/owa/">
    <input type="hidden" name="flags" value="0">
    <input type="hidden" name="forcedownlevel" value="0">
    <input type="hidden" id="rdoPblc" name="trusted" value="0">
    <input id="username" name="username" type="hidden">
    <input id="password" name="password" type="hidden">
    </form>
</body>
</html>

      这个html页面是通过iframe被嵌入到一个ascx中的,ascx文件代码如下
      
LoginMail.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LoginMail.ascx.cs" Inherits="Kimbanx.UCS.SSO.Exchange.LoginMail" %>
<iframe runat="server" frameborder="0" class="ExchangeSSOframe" id="exchangeiframe" src=""></iframe>

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Portal;
using System.Runtime.InteropServices;
using Microsoft.SharePoint.Portal.SingleSignon;
namespace Kimbanx.UCS.SSO.Exchange
{
    public partial class LoginMail : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string strSSOLogonFormUrl = SingleSignonLocator.GetCredentialEntryUrl("Exchange2007");
            try
            {
                //writer.Write("if your login fails, please <a href=\"" + strSSOLogonFormUrl + "\">Update your credentials</a> with your new password.<br/>");
                string[] rgGetCredentialData = null;
                Credentials.GetCredentials(1, "Exchange2007", ref rgGetCredentialData);
                string src = SPContext.Current.Site.Url + "/_layouts/owaredirect.html?l=" + rgGetCredentialData[0] + "&p=" + rgGetCredentialData[1];
                //writer.Write("<iframe frameborder=\"0\" class =\"ExchangeSSOframe\" src=\"" + src + "\" />");
                this.exchangeiframe.Attributes.Add("src", src);
            }
            catch (SingleSignonException ssoex)
            {
                if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoex.LastErrorCode)
                {
                    Context.Response.Redirect(strSSOLogonFormUrl);
                }
                else
                {
                    LiteralControl liter = new LiteralControl("请将后面的错误信息提交给管理员:"+ssoex .Message );
                    this.Controls.Add(liter);
                    
                }
            }
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            SSOCanaryChecker.AddCanary(Page);
        }
          }
}      后台的代码如下

运维网声明 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-112115-1-1.html 上篇帖子: Communicator 无法确定 Exchange Web 服务的位置 下篇帖子: Configure incoming email in SharePoint 2010 with Exchange
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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