Вызов веб-службы SOAP с ошибкой сертификата клиента - заголовок аутентификации, полученный от сервера, был '' - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь вызвать веб-службу SOAP с использованием сертификата клиента и получаю следующее сообщение об ошибке.

HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Аноним».Заголовок аутентификации, полученный от сервера, был ''.

До того, как потребовалась защита веб-службы, я смог получить данные с помощью приведенного ниже кода минус код сертификата.Я подтвердил, что код сертификата правильно извлекает информацию о сертификате клиента из моего хранилища сертификатов.Ниже кода я также добавил информацию о конфигурации своего приложения

Может ли кто-нибудь объяснить, почему я получаю сообщение об ошибке выше?Заранее спасибо всем, кто может предоставить любую информацию.

    Friend Function GetWorkByBAWTS(ByVal sBAWTSLookupName As String, ByVal sUnit As String, ByVal sWorkType As String, ByVal sStatus As String) As ArrayList
    System.Net.ServicePointManager.Expect100Continue = False
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12

    Dim sSearchType As X509FindType = DirectCast([Enum].Parse(GetType(X509FindType), ConfigurationManager.AppSettings("searchtype")), X509FindType)
    Dim sSubjectValue As String = ConfigurationManager.AppSettings("searchvalue")
    Dim sDelimiter As String = ConfigurationManager.AppSettings("delimiter")
    Dim sStoreName As StoreName = DirectCast([Enum].Parse(GetType(StoreName), ConfigurationManager.AppSettings("storename")), StoreName)
    Dim sStoreLocation As StoreLocation = DirectCast([Enum].Parse(GetType(StoreLocation), ConfigurationManager.AppSettings("storelocation")), StoreLocation)

    Dim cert As X509Certificate2 = Nothing
    Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)

    store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)


    Dim certcollection As X509Certificate2Collection = store.Certificates.Find(sSearchType, sSubjectValue, False)
    Dim activecollection As X509Certificate2Collection = certcollection.Find(X509FindType.FindByTimeValid, DateTime.Now, False)

    cert = certcollection(0)
    store.Close()


    Dim iRetry As Integer = 0
    Dim alWorkItems As New ArrayList
    Dim oResponse As lookupObjectsResponse = Nothing
    Dim oClient As ProcessingServiceClient = New ProcessingServiceClient("ProcessingServicePort")

    oClient.ClientCredentials.ClientCertificate.Certificate = cert
    oClient.Endpoint.Address = New ServiceModel.EndpointAddress("https://mywebservice:8443/prodapp/ProcessingService?wsdl")

    Dim oRequest As lookupObjects = New lookupObjects()
    oRequest.lookupObjectsRequest = New lookupObjectsRequest()
    oRequest.lookupObjectsRequest.lookupName = "LKWTSTAT"
    oRequest.lookupObjectsRequest.lookupParameters = New lookupObjectsRequestLookupParameters()


    m_oAuthInfo = New authorizationInfo()
    m_oAuthInfo.userId = "user1"

    oClient.ClientCredentials.UserName.UserName = "user1"
    oClient.ClientCredentials.UserName.Password = "password"


    Dim oItems As lookupParameter()
    ReDim oItems(2)
    oRequest.lookupObjectsRequest.lookupParameters.Items = oItems
    oRequest.lookupObjectsRequest.lookupParameters.Items(0) = New lookupParameter()
    oRequest.lookupObjectsRequest.lookupParameters.Items(0).name = "businessArea"
    oRequest.lookupObjectsRequest.lookupParameters.Items(0).Value = sUnit
    oRequest.lookupObjectsRequest.lookupParameters.Items(1) = New lookupParameter()
    oRequest.lookupObjectsRequest.lookupParameters.Items(1).name = "type"
    oRequest.lookupObjectsRequest.lookupParameters.Items(1).Value = sWorkType
    oRequest.lookupObjectsRequest.lookupParameters.Items(2) = New lookupParameter()
    oRequest.lookupObjectsRequest.lookupParameters.Items(2).name = "status"
    oRequest.lookupObjectsRequest.lookupParameters.Items(2).Value = sStatus


    oResponse = oClient.lookupObjects(m_oAuthInfo, oRequest)


    If Not oResponse.lookupObjectsResponse1.Items Is Nothing Then
        For Each oWorkItem As workInstance In oResponse.lookupObjectsResponse1.Items
            alWorkItems.Add(oWorkItem)
        Next
    End If
    Return alWorkItems
End Function

app.config

<configuration>
<configSections>
</configSections>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
          <binding name="AWDProcessingServiceBinding" closeTimeout="00:01:00"
              openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
              allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferSize="655360" maxBufferPoolSize="524288" maxReceivedMessageSize="655360"
              messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
              useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <!-- <security mode="Transport">
              <transport clientCredentialType="Certificate" proxyCredentialType="Basic" realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security> -->
            <security mode="Transport">
              <transport clientCredentialType="Certificate" />
            </security> 
          </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://mywebservice:8443/betaapp/ProcessingService?wsdl"
            binding="basicHttpBinding" bindingConfiguration="ProcessingServiceBinding"
            contract="PS.ProcessingService" name="AWDProcessingServicePort" />
    </client>
</system.serviceModel>
<appSettings>
    *** removed cert info ***
</appSettings> 

1 Ответ

0 голосов
/ 25 мая 2018

ОБНОВЛЕНИЕ: проблема закончилась тем, что передаваемый идентификатор пользователя был отключен.Идентификатор был повторно включен, и это исправило мою проблему.

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