2011-06-21 1 views
1

Я работаю над сервисом WCF, который защищен Oauth через DotnetOpenAuth.WCF: запрос на токен безопасности не может быть удовлетворен, поскольку аутентификация завершилась неудачно

Где-то у меня возникла ошибка конфигурации, вызывающая ошибку «Запрос на токен безопасности не может быть удовлетворен, поскольку проверка подлинности не удалась». в моем коде, и я не вижу, чтобы найти настройку, которая работает.

Выполняет мелкий локальный хост для локального хоста, но как только я помещаю его на свой сервер (а не в домен), он терпит неудачу с этого сервера самому себе или с localhost на сервер.

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

Поставщик:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="DataApiBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceAuthorization serviceAuthorizationManagerType="OAuthServiceProvider.Code.OAuthAuthorizationManager, OAuthServiceProvider" principalPermissionMode="Custom" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="DataApiBehavior" name="OAuthServiceProvider.DataApi"> 
      <endpoint address="" binding="wsHttpBinding" contract="OAuthServiceProvider.Code.IDataApi"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
      <add prefix="http://devel.nanaimo.ca/" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

Потребитель:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IDataApi" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="Message"> 
        <transport clientCredentialType="Windows" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
         algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://devel.nanaimo.ca/NanaimoProfile/DataApi.svc" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDataApi" 
      contract="CodeServiceOauthProvider.IDataApi" name="WSHttpBinding_IDataApi"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Update: Похоже OAuthServiceProvider.Code.OAuthAuthorizationManager не вызывается в прямом эфире. Он создается, но CheckAccessCore никогда не вызывается. Я понятия не имею, почему пока.

ответ

0

Это только слепой снимок, но AuthorizationManager используется для авторизации пользователей, и он вызывается после аутентификации, но у вас настроен сервис по умолчанию WsHttpBinding - он использует защиту сообщений с помощью проверки подлинности Windows. Аутентификация Windows не работает между компьютерами, которые не являются частью одного и того же домена.

Я бы начал с basicHttpBinding, который по умолчанию не имеет безопасности (без аутентификации). Если это работает, вы можете подумать о том, какую безопасность вы ожидаете.

0

В итоге я только что создал имя пользователя и пароль Windows с очень небольшими правами и жестко закодировал имя пользователя в моей библиотеке. Сертифицированный мог быть другим ответом, но я никогда не заставлял их работать.

 Смежные вопросы

  • Нет связанных вопросов^_^