技术笔记:MOSS&SSO系列1

本文涉及的产品
文本翻译,文本翻译 100万字符
图片翻译,图片翻译 100张
文档翻译,文档翻译 1千页
简介: 技术笔记:MOSS&SSO系列1

最近写了几个SSO的WebParts,发现了些问题,于是提出共参:


Step1: 引用相关的DLL


using Microsoft.SharePoint.Portal.SingleSignon;


using Microsoft.SharePoint.Portal;


或者你可以直接这么做:编辑当前项目的Web.config的


加入:


Step2: 配置MOSS上的SSO


(简单,暂且不表)注意多半要在数据库登录帐户中添加:NT AUTHORITY\ANONYMOUS LOGON 给个可以创建数据库和管理权限的即可!


Step3:Coding...


2种写法都可以,暂不明白?


写法1 string strSSOLogonFormUrl = SingleSignonLocator.GetCredentialEntryUrl("DEMOSSO");


string【】 rgGetCredentialData = null;


Credentials.GetCredentials(1, "DEMOSSO", ref rgGetCredentialData);


string strName = rgGetCredentialData【0】;


string strPwd = rgGetCredentialData【1】;


......


写法2 IntPtr pUserName = IntPtr.Zero;


IntPtr pPassword = IntPtr.Zero;


ISsoProvider isso = SsoProviderFactory.GetSsoProvider();


SsoCredentials myCreds = isso.GetCredentials("DEMOSSO");


pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);


pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);


string uName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);


string uPwd = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);


END:


catch (SingleSignonException ssoe)


{


if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoe.LastErrorCode)


{


Context.Response.Redirect(strSSOLogonFormUrl);


}


else


{


Response.Redirect(strSSOLogonFormUrl);


}


}


Step4:读Exchange Server 2007 的新邮件


引用WebServices先:ICredentials creds = new NetworkCredential(userNaem, rgGetCredentialData【1】, "demo");


// ICredentials creds = CredentialCache.DefaultNetworkCredentials;//("mailadmin", "Pass!word", "demo")


exchangeServer.Credentials = creds;


exchangeServer.Url = @"";


DistinguishedFolderIdType【】 folderIDArray = new DistinguishedFolderIdType【1】;


folderIDArray【0】 = new DistinguishedFolderIdType();


folderIDArray【0】.Id = DistinguishedFolderIdNameType.inbox;


PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();


ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;


PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();


pteftComment.PropertyTag = "0x3004"; // PR_COMMENT


pteftComment.PropertyType = MapiPropertyTypeType.String;


GetFolderType myfoldertype = new GetFolderType();


myfoldertype.FolderIds = folderIDArray;


myfoldertype.FolderShape = new FolderResponseShapeType();


myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;


myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType【2】;


myfoldertype.FolderShape.AdditionalProperties【0】 = ptuftDisplayName;


myfoldertype.FolderShape.AdditionalProperties【1】 = pteftComment;


GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);


FolderInfoResponseMessageType firmtInbox =


(FolderInfoResponseMessageType)myFolder.ResponseMessages.Items【0】;


PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();


ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;


PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();


ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;


PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();


pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS


pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;


FindItemType findItemRequest = new FindItemType();


findItemRequest.Traversal = ItemQueryTraversalType.Shallow;


findItemRequest.ItemShape = new ItemResponseShapeType();


findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.Default;


findItemRequest.ParentFolderIds = new FolderIdType【1】;


findItemRequest.ParentFolderIds【0】 = firmtInbox.Folders【0】.FolderId;


FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);


MessageType mt = //代码效果参考:http://www.jhylw.com.cn/471541537.html

new MessageType();

int newEmail = 0;//Unread email number


int totalEmail = 0;//Total Email number


foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)


{


if (firmtMessage.RootFolder.TotalItemsInView > 0)


{


totalEmail = firmtMessage.RootFolder.TotalItemsInView;


foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)


{


//代码效果参考:http://www.jhylw.com.cn/495823269.html

mt = it as MessageType;

if (mt != null)


{


//this.TextBox1.Text += string.Format(string.Format("是否已读: {0}


", mt.IsRead.ToString()));


if (!mt.IsRead)


newEmail++;


else


continue;


}


#region Eg codes


//Response.Write(string.Format("


标题: {0}


", it.Subject));


//Response.Write(string.Format("


标题: {0}


", it.Subject)+string.Format("发件人: {0}


", mt.IsRead.ToString()));


//Response.Write(string.Format("收件人: {0}


", it.DisplayTo));


//Response.Write(string.Format("抄送人: {0}


", it.DisplayCc));


//Response.Write(string.Format("大小: {0}


", it.Size.ToString()));


//Response.Write(string.Format("


标题: {0}


", it.Subject)+string.Format("发件人: {0}


", mt.IsRead.ToString())+string.Format("重要性: {0}


", it.Importance.ToString()));


////Response.Write(string.Format("是否已读: {0}


", ((MessageType)(it)).IsRead.ToString()));


////Response.Write(string.Format("是否已读: {0}


", it.is));


//Response.Write(string.Format("附件: {0}


", it.HasAttachments.ToString()));


//Response.Write(string.Format("接收时间: {0}


", it.DateTimeReceived.ToString()));


//if (it.Body != null)


//{


// Response.Write(string.Format("正文: {0}


", it.Body.Value));


//}


//if (null != it.ExtendedProperty)


//{


// Response.Write(string.Format("Prop 0x1090: {0}\n\n", it.ExtendedProperty【0】.Item.ToString()));


//}


//else


//{


// Response.Write(string.Format("Prop 0x1090: not found"));


//}


#endregion


}


}


}


Response.Write(newEmail.ToString() + "//" + totalEmail.ToString());


Step5:AJAX更新结果


基本的例子,总邮件数顺便也可以拿到的。。。


下回谈谈如何与OWA集成起来!


EOF


本文链接:


关于博主:评论和私信会在第一时间回复。或者直接私信我。


版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!


声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!


msn: pccai1983@hotmail.com

相关文章
|
6月前
|
XML 安全 API
理解并实现单点登录(SSO)的技术解析
【5月更文挑战第21天】本文解析了单点登录(SSO)技术,旨在解决多系统登录的效率和安全问题。SSO允许用户在集中认证系统登录后,无须反复输入凭证即可访问其他受信任应用。其原理基于信任机制,通过会话令牌实现身份验证。文中提到了两种实现方式:SAML-based SSO,利用SAML断言交换安全信息;OAuth 2.0-based SSO,通过授权码或访问令牌授权。实施SSO时需关注认证中心安全、令牌有效期、跨域通信及用户体验优化。
|
数据安全/隐私保护
使用校园账号登录WOS(Web of Science)并检索文献
使用校园账号登录WOS(Web of Science)并检索文献
732 0
|
存储 JSON 缓存
金鱼哥RHCA回忆录:CL210集成身份管理--管理身份服务令牌
第三章 集成身份管理--管理身份服务令牌
410 0
金鱼哥RHCA回忆录:CL210集成身份管理--管理身份服务令牌
|
存储 Web App开发 运维
金鱼哥RHCA回忆录:CL210集成身份管理--管理集成的IDM配置
第三章 集成身份管理--管理集成的IDM配置
359 0
金鱼哥RHCA回忆录:CL210集成身份管理--管理集成的IDM配置
下一篇
无影云桌面