如何在使用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身份验证被利用的服务帐户的下载文件。