如何在使用Kerberos身份验证的同时将EMC DOCUMENTUM D2中的文档下载到我的C#代码中?
问题描述:
我的C#应用程序部署在Sharepoint中,我想从C#中的EMC DOCUMENTUM D2下载文档并将其上传到Sharepoint文档库中。 我正在使用kerberos身份验证进行单点登录.Kerberos在我搜索文档时工作正常,但是当我尝试从D2下载文档时,服务帐户正在被代码用于下载文档(我知道它使用服务帐户,当我请参阅Documentum的传入流量日志)。如何在使用Kerberos身份验证的同时将EMC DOCUMENTUM D2中的文档下载到我的C#代码中?
IObjectService objectService = this.GetRemoteServiceDownload<IObjectService>(moduleName);
函数的定义。
protected IObjectService GetRemoteServiceDownload<IObjectService>(string serviceModule)
{
KerberosTokenHandler handler = new KerberosTokenHandler();
try
{
using (KerberosClientContext kerberosClientContext = new KerberosClientContext(servicePrincipalName, true, ImpersonationLevel.Delegation))
{
try
{
KerberosBinarySecurityToken token = new KerberosBinarySecurityToken(kerberosClientContext.InitializeContext(), KerberosValueType.KERBEROSV5_AP_REQ);
handler.SetBinarySecurityToken(token);
List<IEndpointBehavior> handlers = new List<IEndpointBehavior>();
handlers.Add(handler);
handlers.Add(new DFSBindingBehaviour(0, 10, 0, 0, 10, 0, 40960, 32, 16384, 16384, 20000000));
var remoteService = ServiceFactory.Instance.GetRemoteService<IObjectService>(serviceContext, serviceModule, address, handlers);
return remoteService;
}
catch (Exception ex)
{
Service.LoggerService.SetError(new Exception("In GetRemoteService" + ex.Message, ex));
return default(IObjectService);
}
}
}
catch (Exception ex)
{
Service.LoggerService.SetError(new Exception("In GetRemoteService using" + ex.Message, ex));
return default(IObjectService);
}
}
答
伙计们我能解决问题! 这不是一个kerberos问题,实际上它是调用函数的位置问题。 发起Kerberos身份验证功能是内
using(SPSecurity.RunWithElevatedPrivileges)
{
}
因为这Kerberos身份验证被利用的服务帐户的下载文件。