1

WCF 認証に Message Security を使用しています。そして私の clientCredentialType="UserName".

サービスへのアクセス中に有効なユーザー名とパスワードを提供していなくても、正常に機能しています。

認証を行う必要があります。資格情報が正しい場合にのみ、アクセスを許可する必要があります。`ここにコードを入力してください コードは次のとおりです: WCF サービス動作セクション:

 <behaviors>
      <serviceBehaviors>
        <behavior name="AuthenticationBehaviour">
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WcfServiceAuthentication.Authenticator, WcfServiceAuthentication"/>            
          </serviceCredentials>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

Web.config の WCF サービス バインディング セクション

  <bindings>
        <wsHttpBinding>
          <binding name="Binding1">
            <security mode="Message">
              <message clientCredentialType="UserName" />
            </security>
          </binding>
        </wsHttpBinding>
      </bindings>

私の認証クラス

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IdentityModel.Selectors;
using System.ServiceModel;
using log4net;
using System.Reflection;
namespace WcfServiceAuthentication
{
    public class Authenticator : UserNamePasswordValidator
    {
        private static ILog _logger = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        public override void Validate(string userName, string password)
        {
            _logger.Info("Validate called with username:" + userName + " and password:" + password);

            if (null == userName || null == password)
            {
                throw new ArgumentNullException();
            }

            if (!(userName == "Admin" && password == "Admin123"))
            {
                // This throws an informative fault to the client.
                throw new FaultException("Unknown Username or Incorrect Password");
            }

            _logger.Info("End called");
        }
    }
}

私の認証サービス

  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
    public class AuthenticationService : IAuthenticationService
    {


        public int add(int num1, int num2)
        {
            return (num1 + num2);
        }
    }
}

クライアント アプリケーション:

 AuthenticationServiceClient proxy = new AuthenticationServiceClient();

            //proxy.ClientCredentials.UserName.UserName = "Admin";
            //proxy.ClientCredentials.UserName.Password = "Admin123";
            int addition= proxy.add(10, 10);
            return View();

ここでは資格情報を提供していませんが、Add メソッドは正常に機能しています。認証を要求する必要があります。

4

1 に答える 1

0

以下のタグを追加して Web 構成を変更し、認証サービスを有効にします。

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

Web 構成ファイルに追加する必要があります。サンプルはこちら

<system.web.extensions>
  <scripting>
    <webServices>
      <authenticationService enabled="true" 
         requireSSL = "true"/>
    </webServices>
 </scripting>
 </system.web.extensions>
 <system.serviceModel>
   <services>
      <service name="System.Web.ApplicationServices.AuthenticationService"
         behaviorConfiguration="AuthenticationServiceTypeBehaviors">
           <endpoint contract=
         "System.Web.ApplicationServices.AuthenticationService"
          binding="basicHttpBinding"
          bindingConfiguration="userHttps" 
          bindingNamespace="http://asp.net/ApplicationServices/v200"/>
      </service>
   </services>
   <bindings>
    <basicHttpBinding>
        <binding name="userHttps">
            <security mode="Transport" />
        </binding>
    </basicHttpBinding>
   </bindings>
    <behaviors>
       <serviceBehaviors>
            <behavior name="AuthenticationServiceTypeBehaviors">
            <serviceMetadata httpGetEnabled="true"/>
    </behavior>
</serviceBehaviors>
   </behaviors>
    <serviceHostingEnvironment 
      aspNetCompatibilityEnabled="true"/>
     </system.serviceModel>
于 2013-04-29T05:30:21.197 に答える