WCF: запрос маркера безопасности не может быть выполнен из-за сбоя аутентификации - PullRequest
1 голос
/ 22 июня 2011

Я работаю над службой WCF, которая защищена Oauth через DotnetOpenAuth.

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

Работает нормально localhost to localhost, но как только я помещаю его на свой сервер (не в домене), происходит сбой от этого сервера к себе или от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>

Обновление: Взглядкак OAuthServiceProvider.Code.OAuthAuthorizationManager Не вызывается в прямом эфире.Он создан, но CheckAccessCore никогда не вызывается.Я пока не знаю, почему.

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

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

0 голосов
/ 22 июня 2011

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

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

...