3

Я пытаюсь пройти аутентификацию с использованием службы аутентификации и моего поставщика членства. В идеале я хочу назвать своего поставщика членства, но я бомбаю, прежде чем ударить своего провайдера. Говорит, что токен не может быть проверен. Проверка моего журнала ошибок, похоже, я пытаюсь выполнить аутентификацию с помощью Windows auth. Это не то, что я собираюсь сделать. Это веб-файл с svc-файлом. Я использую svcUtil и создаю клиент из WSDL. У меня есть тестовая страница в приложении, из которой я использую клиент. Его просто тестовая страница и не будет развернута. Я вижу, что встроенная проверка подлинности Windows проверяется в IIS, которая не кажется правильной, но если я сниму ее, Visual Studio не будет отлаживать. В любом случае я смотрю в журнале событий и получить две ошибкиАутентификация службы WCF с использованием System.Web.ApplicationServices.AuthenticationService, я не могу выполнить аутентификацию поставщику членства

Logon Failure: 
Reason:  Unknown user name or bad password 
User Name: sandagtestuser 
Domain:   
Logon Type: 8 
Logon Process: Advapi 
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0 
Workstation Name: SDD-CK 

Logon attempt by: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0 
Logon account: sandagtestuser 
Source Workstation: SDD-CK 
Error Code: 0xC0000064 

Вот привязки в web.config. Обратите внимание, что я пытаюсь использовать SSL и HTTPS. Это мой первый удар по безопасности WCF.

<system.serviceModel> 
     <client> 
     <endpoint address="https://SDD-CK/ATISServices/Services/AuthService.svc/AuthService" 
       binding="basicHttpBinding" bindingConfiguration="userHttps_AuthenticationService" 
       contract="AuthenticationService" name="userHttps_AuthenticationService" > 
     </endpoint> 
    </client> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <behaviors> 
<serviceBehaviors> 
       <behavior name="ATISServices.AuthServiceBehavior"> 
       <serviceMetadata httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="false" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 

      <binding name="userHttps_AuthenticationService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportWithMessageCredential"> 
        <transport proxyCredentialType="None" clientCredentialType="None" realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" />      
       </security> 
      </binding> 
      <binding name="basic_auth_config"> 
       <security mode="TransportWithMessageCredential"> 
        <message clientCredentialType="UserName" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 

    </bindings> 
    <services> 

     <service behaviorConfiguration="ATISServices.AuthServiceBehavior" 
      name="System.Web.ApplicationServices.AuthenticationService"> 

      <endpoint binding="basicHttpBinding" bindingName="userHttps" bindingConfiguration="basic_auth_config" 
       bindingNamespace="http://asp.net/ApplicationServices/v200" 
       contract="System.Web.ApplicationServices.AuthenticationService" 
       address="AuthService"/> 

      <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" 
       contract="IMetadataExchange" /> 

     </service> 
    </services> 
</system.serviceModel> 

Возможно, какой-то гуру WCF может помочь мне исправить проблему. Я вижу, как учетные данные попадают на сервер через журнал событий, поэтому я не должен быть слишком ужасным. Фактическое сообщение InnerException по ошибке At least one security token in the message could not be validated.

Наконец, вот некоторые дополнительные параметры web.config, которые могут представлять интерес.

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <authenticationService enabled="true" requireSSL="true"/> 
     </webServices> 

    </scripting> 
</system.web.extensions> 

<authentication mode="Forms" > 
     <forms cookieless="UseCookies" /> 
    </authentication> 

<membership defaultProvider="KCMembershipProvider"> 
     <providers> 
      <clear/> 
      <add 
      name="KCMembershipProvider" 
      applicationName="/" 
      type="zcore.MembershipProvider.KCMembershipProvider, zcore.MembershipProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
     </providers> 
    </membership> 

Любая помощь или советы на данном этапе были бы весьма полезными. Я боролся с этим в течение двух дней. Я также использую сертификаты. Я сделал их с помощью инструмента «makecert». Один из них является органом сертификации, а другой - сертификатом «localhost», использующим указанный орган. Я также использовал httpcfg и установил отпечаток cert к порту 9307, однако, когда я набрал «: 9307» на служебном адресе, я получаю соединение активно отказано. Я действительно ценю любую помощь здесь.

Приветствия,
~ ск в Сан-Диего

ответ

1

Это на самом деле получил его на работу. Добавление этого в поведение службы.

<serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="KCMembershipProvider"/> 
     </serviceCredentials>