WCF Windows集成身份验证详细步骤。

How to: Use basicHttpBinding with Windows Authentication and TransportCredentialOnly in WCF from Windows Forms

            7 out of 29 rated this helpful - Rate this topic                         

patterns & practices Developer Center

Applies To

  • Microsoft Windows Communication Foundation (WCF) 3.5
  • Microsoft Visual Studio 2008

Summary

This how-to article walks you through the process of using Windows authentication over the basicHttpBinding binding using the TransportCredentialsOnly security mode. The article shows you how to configure WCF, configure Internet Information Services (IIS) for Windows authentication, and test the service with a sample WCF client.

Contents

                 

Objectives

  • Learn how to create a WCF service hosted in IIS.
  • Learn how to expose the WCF service as a legacy Web service through basicHttpBinding.
  • Learn how to call the service from a test client.
                 

Overview

Windows authentication is well suited for scenarios in which your users have domain credentials. In the scenario described in this how-to article, users are authenticated by using Windows authentication. The basicHttpBinding binding is used in order to provide support for older clients that expect a legacy ASMX Web service. The TransportCredentialOnly security mode option passes the user credentials without encrypting or signing the messages. Use this mode with caution as it will not protect the credentials being transmitted and they will have to be protected by some other means, such as Internet Protocol Security (IPSec).

In this how-to article, you will create a sample WCF service in Visual Studio 2008. You will then configure the service to use basicHttpBinding with TransportCredentialOnly security through the use of the WCF Configuration Editor. You will enable Windows authentication in IIS to allow your users to authenticate to the service. Finally, you will create a test client to verify that the service is working properly.

                 

Summary of Steps

  • Step 1: Create a Sample WCF Service
  • Step 2: Configure the WCF Service to Use basicHttpBinding
  • Step 3: Configure the basicHttpBinding to use Windows Authentication with TransportCredentialOnly
  • Step 4: Enable Windows Authentication on IIS
  • Step 5: Create a Windows Forms Test Client Application
  • Step 6: Add a WCF Service Reference to the Client
  • Step 7: Test the Client and WCF Service
                 

Step 1: Create a Sample WCF Service

In this step, you create a WCF service in Visual Studio, hosted in an IIS virtual directory. 

  1. In Visual Studio, on the File menu, click New Web Site.
  2. In the Templates section, select WCF Service. Make sure that the Location is set to Http, and specify http://localhost/WCFServiceBasicHttp as the Path. Click OK in the New Web Site dialog box to create a virtual directory and a sample WCF service.
  3. Browse to your WCF service at http://localhost/WCFServiceBasicHttp/Service.svc.

    You should see your WCF service respond with details of the service.

                 

Step 2: Configure the WCF Service to Use basicHttpBinding

In this step, you configure your WCF service endpoint to use basicHttpBinding

  1. Right-click the Web.config file of the WCF service and then click Edit WCF Configuration.

    If you do not see the Edit WCF Configuration option, on the Tools menu, click WCF Service Configuration Editor. Close the WCF Service Configuration Editor tool that appears. The option should now appear on the web.config context menu.

  2. In the Configuration Editor, in the Configuration section, expand Service and then expand Endpoints.
  3. Select the first node [Empty Name]. Set the name attribute to BasicHttpEndpoint.

    By default, the name will be empty because it is an optional attribute.

  4. In the Service Endpoint section, set the binding attribute to basicHttpBinding by choosing this option from the drop-down list.
  5. In the Configuration Editor, on the File menu, click Save.
  6. In Visual Studio, verify your configuration settings in Web.config. The configuration should look as follows:
    …
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="Service">
        <endpoint address="" binding="basicHttpBinding"
            name="BasicHttpEndpoint"
            bindingConfiguration=""
            contract="IService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding"
           contract="IMetadataExchange" />
      </service>
    </services> 
    …
    
    
                 

Step 3: Configure basicHttpBinding to use Windows Authentication with TransportCredentialOnly

By default, the basicHttpBinding security mode is None. This default setting means that you do not have authentication and that neither transport nor message security is enabled. By enabling Windows authentication with TransportCredentialOnly, you will get authentication, but no message protection; this is similar to how an ASMX Web service works.

  1. In the Configuration Editor, in the Configuration section, select the Bindings folder.
  2. In the Bindings section, choose New Binding Configuration.
  3. In the Create a New Binding dialog box, select basicHttpBinding.
  4. Click OK.
  5. Set the Name of the binding configuration to some logical and recognizable name; for example, BasicHttpEndpointBinding.
  6. Click the Security tab.
  7. Set the Mode attribute to TransportCredentialOnly by choosing this option from the drop-down menu.
  8. Set the TransportClientCredentialType to Windows by choosing this option from the drop-down list.

    In this case, the Windows option represents Kerberos.

  9. In the Configuration section, select BasicHttpEndpoint.
  10. Set the BindingConfiguration attribute to BasicHttpEndpointBinding by choosing this option from the drop-down list.

    This associates the binding configuration setting with the binding.

  11. In the Configuration Editor, on the File menu, click Save.
  12. In Visual Studio, verify your configuration, which should look as follows:
    ...
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpEndpointBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="Service">
        <endpoint address="" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpEndpointBinding"
          name="BasicHttpEndpoint" contract="IService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding"
            contract="IMetadataExchange" />
      </service>
    </services>
    ...
    
    
                 

Step 4: Enable Windows Authentication on IIS

In this step, you enable IIS for Windows authentication to match the authentication scheme used in your WCF service.

  1. Open Internet Information Services (IIS) Manager by running the inetmgr command from the command line.
  2. Browse to the WCF Service virtual directory created in Step 1.
  3. Right-click the virtual directory and then click Properties.
  4. In the Properties dialog box, click the Directory Security tab.
  5. In the Authentication and access control section, click Edit.
  6. In the Authentication Methods dialog box, clear the Enable anonymous access check box, and then select the Integrated Windows authentication check box.
  7. In the Authentication Methods dialog box, click OK.
  8. In the Properties dialog box, click Apply and then click OK.
  9. Run the iisreset command from the command line.
  10. Verify that your service is working correctly. In IIS Manager, browse to your service (Service.svc).
Ff648505.note(en-us,PandP.10).gifNote:
Important: Make sure that you have installed ASP.NET on your machine; if not or if in doubt, run the following command:
> c:\Windows\Microsoft.NET\Framework\vX.X.XXXXX\aspnet_regiis.exe /i

                 

Step 5: Create a Windows Forms Test Client Application

In this step, you create a Windows Forms application to test the WCF service.

  1. Right-click your solution, click Add, and then click New Project.
  2. In the Add New Project dialog box, in the Templates section, select Windows Application.
  3. In the Name field, type Test Client and then click OK to create a Windows Forms application.
                 

Step 6: Add a WCF Service Reference to the Client

In this step, you add a Web reference of the WCF service to your Client application. This How To article uses a Web reference to show the usage of a WCF service as a legacy Web service; otherwise, you can add it as a service reference.

  1. Right-click your Client project and then click Add Service References.
  2. Click Advanced and then click Add Web Reference under the Compatibility section.
  3. In the Add Web References dialog box, set the URL to your WCF service: http://localhost/WCFServiceBasicHttp/Service.svc
  4. Click Go.
  5. In the Web reference name: field, change localhost to WCFTestService.
  6. Click Add Reference.

    A Web reference to WCFTestService should now appear in your Client project.

                 

Step 7: Test the Client and WCF Service

In this step, you access the WCF service as a legacy ASMX Web service and make sure that it works.

  1. In your Client project, drag a button control onto your form.
  2. Double-click the button control to show the underlying code.
  3. In the code behind the button click, create an instance of the proxy, pass the default user credentials, and call MyOperation1 of your WCF Service. The code should look as follows:
    private void button1_Click(object sender, EventArgs e)
    {
          WCFTestService.Service myService = new 
                                  WCFTestService.Service();
          myService.Credentials = 
                           System.Net.CredentialCache.DefaultCredentials;
          MessageBox.Show(myService.GetData(123, true));
          myService.Dispose();
    }
    
    
  4. Right-click the Client project and then click Set as Startup Project.
  5. Run the Client application by pressing F5 or CTRL+F5. When you click the button on the form, the message “You entered: 123” should appear.

    How to: Use basicHttpBinding with Windows Authentication and TransportCredentialOnly in WCF from Windows Forms

                7 out of 29 rated this helpful - Rate this topic                         

    patterns & practices Developer Center

    Applies To

    • Microsoft Windows Communication Foundation (WCF) 3.5
    • Microsoft Visual Studio 2008

    Summary

    This how-to article walks you through the process of using Windows authentication over the basicHttpBinding binding using the TransportCredentialsOnly security mode. The article shows you how to configure WCF, configure Internet Information Services (IIS) for Windows authentication, and test the service with a sample WCF client.

    Contents

                     

    Objectives

    • Learn how to create a WCF service hosted in IIS.
    • Learn how to expose the WCF service as a legacy Web service through basicHttpBinding.
    • Learn how to call the service from a test client.
                     

    Overview

    Windows authentication is well suited for scenarios in which your users have domain credentials. In the scenario described in this how-to article, users are authenticated by using Windows authentication. The basicHttpBinding binding is used in order to provide support for older clients that expect a legacy ASMX Web service. The TransportCredentialOnly security mode option passes the user credentials without encrypting or signing the messages. Use this mode with caution as it will not protect the credentials being transmitted and they will have to be protected by some other means, such as Internet Protocol Security (IPSec).

    In this how-to article, you will create a sample WCF service in Visual Studio 2008. You will then configure the service to use basicHttpBinding with TransportCredentialOnly security through the use of the WCF Configuration Editor. You will enable Windows authentication in IIS to allow your users to authenticate to the service. Finally, you will create a test client to verify that the service is working properly.

                     

    Summary of Steps

    • Step 1: Create a Sample WCF Service
    • Step 2: Configure the WCF Service to Use basicHttpBinding
    • Step 3: Configure the basicHttpBinding to use Windows Authentication with TransportCredentialOnly
    • Step 4: Enable Windows Authentication on IIS
    • Step 5: Create a Windows Forms Test Client Application
    • Step 6: Add a WCF Service Reference to the Client
    • Step 7: Test the Client and WCF Service
                     

    Step 1: Create a Sample WCF Service

    In this step, you create a WCF service in Visual Studio, hosted in an IIS virtual directory. 

    1. In Visual Studio, on the File menu, click New Web Site.
    2. In the Templates section, select WCF Service. Make sure that the Location is set to Http, and specify http://localhost/WCFServiceBasicHttp as the Path. Click OK in the New Web Site dialog box to create a virtual directory and a sample WCF service.
    3. Browse to your WCF service at http://localhost/WCFServiceBasicHttp/Service.svc.

      You should see your WCF service respond with details of the service.

                     

    Step 2: Configure the WCF Service to Use basicHttpBinding

    In this step, you configure your WCF service endpoint to use basicHttpBinding

    1. Right-click the Web.config file of the WCF service and then click Edit WCF Configuration.

      If you do not see the Edit WCF Configuration option, on the Tools menu, click WCF Service Configuration Editor. Close the WCF Service Configuration Editor tool that appears. The option should now appear on the web.config context menu.

    2. In the Configuration Editor, in the Configuration section, expand Service and then expand Endpoints.
    3. Select the first node [Empty Name]. Set the name attribute to BasicHttpEndpoint.

      By default, the name will be empty because it is an optional attribute.

    4. In the Service Endpoint section, set the binding attribute to basicHttpBinding by choosing this option from the drop-down list.
    5. In the Configuration Editor, on the File menu, click Save.
    6. In Visual Studio, verify your configuration settings in Web.config. The configuration should look as follows:
      …
      <services>
        <service behaviorConfiguration="ServiceBehavior" name="Service">
          <endpoint address="" binding="basicHttpBinding"
              name="BasicHttpEndpoint"
              bindingConfiguration=""
              contract="IService">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
          <endpoint address="mex" binding="mexHttpBinding"
             contract="IMetadataExchange" />
        </service>
      </services> 
      …
      
      
                     

    Step 3: Configure basicHttpBinding to use Windows Authentication with TransportCredentialOnly

    By default, the basicHttpBinding security mode is None. This default setting means that you do not have authentication and that neither transport nor message security is enabled. By enabling Windows authentication with TransportCredentialOnly, you will get authentication, but no message protection; this is similar to how an ASMX Web service works.

    1. In the Configuration Editor, in the Configuration section, select the Bindings folder.
    2. In the Bindings section, choose New Binding Configuration.
    3. In the Create a New Binding dialog box, select basicHttpBinding.
    4. Click OK.
    5. Set the Name of the binding configuration to some logical and recognizable name; for example, BasicHttpEndpointBinding.
    6. Click the Security tab.
    7. Set the Mode attribute to TransportCredentialOnly by choosing this option from the drop-down menu.
    8. Set the TransportClientCredentialType to Windows by choosing this option from the drop-down list.

      In this case, the Windows option represents Kerberos.

    9. In the Configuration section, select BasicHttpEndpoint.
    10. Set the BindingConfiguration attribute to BasicHttpEndpointBinding by choosing this option from the drop-down list.

      This associates the binding configuration setting with the binding.

    11. In the Configuration Editor, on the File menu, click Save.
    12. In Visual Studio, verify your configuration, which should look as follows:
      ...
      <bindings>
        <basicHttpBinding>
          <binding name="BasicHttpEndpointBinding">
            <security mode="TransportCredentialOnly">
              <transport clientCredentialType="Windows" />
            </security>
          </binding>
        </basicHttpBinding>
      </bindings>
      <services>
        <service behaviorConfiguration="ServiceBehavior" name="Service">
          <endpoint address="" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpEndpointBinding"
            name="BasicHttpEndpoint" contract="IService">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
          <endpoint address="mex" binding="mexHttpBinding"
              contract="IMetadataExchange" />
        </service>
      </services>
      ...
      
      
                     

    Step 4: Enable Windows Authentication on IIS

    In this step, you enable IIS for Windows authentication to match the authentication scheme used in your WCF service.

    1. Open Internet Information Services (IIS) Manager by running the inetmgr command from the command line.
    2. Browse to the WCF Service virtual directory created in Step 1.
    3. Right-click the virtual directory and then click Properties.
    4. In the Properties dialog box, click the Directory Security tab.
    5. In the Authentication and access control section, click Edit.
    6. In the Authentication Methods dialog box, clear the Enable anonymous access check box, and then select the Integrated Windows authentication check box.
    7. In the Authentication Methods dialog box, click OK.
    8. In the Properties dialog box, click Apply and then click OK.
    9. Run the iisreset command from the command line.
    10. Verify that your service is working correctly. In IIS Manager, browse to your service (Service.svc).
    Ff648505.note(en-us,PandP.10).gifNote:
    Important: Make sure that you have installed ASP.NET on your machine; if not or if in doubt, run the following command:
    > c:\Windows\Microsoft.NET\Framework\vX.X.XXXXX\aspnet_regiis.exe /i

                     

    Step 5: Create a Windows Forms Test Client Application

    In this step, you create a Windows Forms application to test the WCF service.

    1. Right-click your solution, click Add, and then click New Project.
    2. In the Add New Project dialog box, in the Templates section, select Windows Application.
    3. In the Name field, type Test Client and then click OK to create a Windows Forms application.
                     

    Step 6: Add a WCF Service Reference to the Client

    In this step, you add a Web reference of the WCF service to your Client application. This How To article uses a Web reference to show the usage of a WCF service as a legacy Web service; otherwise, you can add it as a service reference.

    1. Right-click your Client project and then click Add Service References.
    2. Click Advanced and then click Add Web Reference under the Compatibility section.
    3. In the Add Web References dialog box, set the URL to your WCF service: http://localhost/WCFServiceBasicHttp/Service.svc
    4. Click Go.
    5. In the Web reference name: field, change localhost to WCFTestService.
    6. Click Add Reference.

      A Web reference to WCFTestService should now appear in your Client project.

                     

    Step 7: Test the Client and WCF Service

    In this step, you access the WCF service as a legacy ASMX Web service and make sure that it works.

    1. In your Client project, drag a button control onto your form.
    2. Double-click the button control to show the underlying code.
    3. In the code behind the button click, create an instance of the proxy, pass the default user credentials, and call MyOperation1 of your WCF Service. The code should look as follows:
      private void button1_Click(object sender, EventArgs e)
      {
            WCFTestService.Service myService = new 
                                    WCFTestService.Service();
            myService.Credentials = 
                             System.Net.CredentialCache.DefaultCredentials;
            MessageBox.Show(myService.GetData(123, true));
            myService.Dispose();
      }
      
      
    4. Right-click the Client project and then click Set as Startup Project.
    5. Run the Client application by pressing F5 or CTRL+F5. When you click the button on the form, the message “You entered: 123” should appear.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值