Как загрузить документ из EMC DOCUMENTUM D2 в мой код C# при использовании аутентификации Kerberos?

Мое приложение C# развернуто в Sharepoint, и я хочу загрузить документ из EMC DOCUMENTUM D2 в C# и загрузить его в библиотеку документов Sharepoint. Я использую аутентификацию Kerberos для единого входа.Kerberos работает нормально, когда я ищу документы, однако, когда я пытаюсь загрузить документ из D2, каким-то образом служебная учетная запись используется кодом для загрузки документа (я знаю, что она использует служебную учетную запись, когда вижу журнал входящего трафика Documentum).

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);
        }
    }

1 ответ

Решение

Ребята, я смог решить проблему! Это была не проблема с Kerberos, на самом деле это была проблема расположения вызывающей функции. Функция, которая инициировала аутентификацию Kerberos, была в пределах

using(SPSecurity.RunWithElevatedPrivileges )
{

}

Из-за этого аутентификация Kerberos использовала служебную учетную запись для загрузки документа.

Другие вопросы по тегам