Sharepoint не получает текущего пользователя NetworkCredential из активного каталога - PullRequest
0 голосов
/ 17 января 2012

у нас странная проблема, у нас единый вход в систему и мы пытаемся получить счетчик непрочитанной электронной почты из веб-службы Exchange ews, проблема в том, что он всегда получает одинаковое количество для всех пользователей, которые фактически являются пользователями сервера.

'it should now get for current user who requested the page 
'but its always for server user where sharepoint is installed
Public Sub GetUnreadEmailCount()
    Dim errormsg As String = String.Empty
    Dim UnreadCount As Integer = 0
    Dim esb As New ExchangeServiceBinding

    Try
        esb.RequestServerVersionValue = New RequestServerVersion
        esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1
        esb.UseDefaultCredentials = True
        esb.Url = Domain + "/EWS/Exchange.asmx"

        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf CertificateValidationCallBack)


        Dim biArray(1) As BaseFolderIdType
        Dim dfFolder As New DistinguishedFolderIdType
        dfFolder.Id = DistinguishedFolderIdNameType.inbox
        biArray(0) = dfFolder
        Dim geGetFolder As New GetFolderType
        geGetFolder.FolderIds = biArray
        geGetFolder.FolderShape = New FolderResponseShapeType
        geGetFolder.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties
        Dim gfResponse As GetFolderResponseType = esb.GetFolder(geGetFolder)

        Dim rmta As ResponseMessageType() = gfResponse.ResponseMessages.Items
        Dim rmt As FolderInfoResponseMessageType = DirectCast(rmta(0), FolderInfoResponseMessageType)
        If rmt.ResponseClass = ResponseClassType.Success Then
            Dim folder As FolderType = DirectCast(rmt.Folders(0), FolderType)
            UnreadCount = folder.UnreadCount

        End If

        Label1.Text = vbCrLf + "Unread email count : " + UnreadCount.ToString
        ' Return UnreadCount
    Catch ex As Exception
        If Not ex.Message Is Nothing Then errormsg = ex.Message
        Try
            If Not ex.InnerException.Message Is Nothing Then errormsg = errormsg + " : " + ex.InnerException.Message
        Catch e As Exception

        End Try
    Finally
        If esb IsNot Nothing Then esb.Dispose() : esb = Nothing
        If Not errormsg = String.Empty Then
            Label1.Text = vbCrLf + "Error : " + errormsg
        End If
    End Try

End Sub

Ответы [ 2 ]

1 голос
/ 18 января 2012

У нас фактически была та же проблема, хотя мы не использовали единый вход.Поэтому я не уверен, что это именно то, что вы испытываете.

Проблема в том, что у вас не может быть пользователя на Машина A передает свои учетные данные Машина B (SharePoint?), А затем Машина B отправляет эти учетные данные на Машина C

Это называется проблемой "Double Hop" и является функцией безопасностиОднако я не очень разбираюсь в технической стороне.Нашим решением было использование Kerberos.

Надеюсь, это поможет вам, если нет, то поможет исключить эту конкретную проблему:)

0 голосов
/ 19 января 2012

Ваш код на стороне сервера работает как идентификатор AppPool, который является вашей учетной записью службы sharepoint.Я предполагаю, что это то, что вы подразумеваете под «пользователем сервера».

esb.UseDefaultCredentials = true; 

будет использовать кредиты контекста.Я не уверен в том, что доступно в службах EWS, поэтому, если вы можете использовать учетную запись с более высоким уровнем привилегий и получать данные в зависимости от входящего пользователя, то есть HttpContext.Current.User.Identity в качестве параметра, то это может бытьлучший способ.

Вы можете проходить аутентификацию через javascript непосредственно в службах EWS, пропуская код на стороне сервера и писать что-то, что потребляет и отображает данные сервера по мере необходимости.

You 'Мне нужно найти способ авторизации пользователя непосредственно к сервисам EWS.Двойной переход является проблемой с NTLM, поскольку ваш билет NTLM действителен только для первого перехода.Kerberos исправляет это, но вы все равно должны выдавать себя за него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...