Настройте службу wcf для http и https, а также добавьте имя пользователя / пароль для доступа - PullRequest
0 голосов
/ 25 октября 2010

Я новичок в WCF и настройке сервиса и у меня есть 2 вопроса. Мой первый вопрос, у меня есть сервис, который будет доступен через https на веб-сервере. Однако локально на моем локальном IIS7 он будет доступен через http, так как https недоступен. Как настроить службу, к которой будут обращаться оба?

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

Вот пример соответствующей области моего файла web.config.

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <!-- standard AJAX binding that supports SSL -->
            <binding name="TransportSecurity">
                <security mode="Transport" />
            </binding>
            <!-- standard AJAX binding for HTTP only -->
            <binding name="NoSecurity">
                <security mode="None" />
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="EndPointBehavior">
                <enableWebScript />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="ServiceName">
            <endpoint address="" 
                      behaviorConfiguration="EndPointBehavior"
                      binding="webHttpBinding" 
                      bindingConfiguration="NoSecurity"
                      contract="App.Service.ServiceName" />
        </service>
    </services>
    <diagnostics>
        <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" logMalformedMessages="true" logEntireMessage="false" maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" />
    </diagnostics>
</system.serviceModel>

В этом конфиге служба настроена только для http, а к ней не применяются имя пользователя / пароль.

1 Ответ

0 голосов
/ 25 октября 2010

Вы можете добавить конфигурацию пароля для имени пользователя в свои привязки:

            <security mode="Transport">
                <transport clientCredentialType="Basic" />
            </security>

и

            <security mode="TransportCredentialOnly"> <!-- This means http + credential -->
                <transport clientCredentialType="Basic" />
            </security>

Что касается авторизации, существует множество вариантов.Самое простое - применить специальный валидатор пароля для имени пользователя (пример artibtrary взят из http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx):

<serviceBehaviors>
  <behavior name="CustomValidator">
    <serviceCredentials>

      <userNameAuthentication
        userNamePasswordValidationMode="Custom"
        customUserNamePasswordValidatorType=
  </behavior>
</serviceBehaviors>

. На более сложном уровне прочтите ServiceAuthorizationManager:

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

...