如何将ASP.NET身份验证传递给WCF服务

时间:2015-11-05 09:43:43

标签: asp.net wcf authentication

我有一个基本身份验证的WCF服务,需要用户名和密码。我在胖客户端中使用此服务,用户名和密码存储在应用程序中,因此可以轻松传递。

我现在想要将此服务与ASP.NET应用程序一起使用。我启用了安全性,它运行正常。我想知道将这些凭据发送到我的Web服务的最佳方式。我可以使用this.User.Identity.Name轻松获取用户名,但密码更难。当然我可以将它存储在加密的会话变量中,但这是正确的解决方案吗?下面的代码片段显示当前的硬编码密码: -

MyServiceClient client = new MyServiceClient();
client.ClientCredentials.UserName.UserName = this.User.Identity.Name;
client.ClientCredentials.UserName.Password = "Password";
顺便说一句:这是我在这里找到答案多年后的第一个问题,所以请放轻松我: - )

1 个答案:

答案 0 :(得分:0)

启用身份验证服务 如果您还没有ASP.NET Web应用程序,请创建一个。 将服务文件(.svc)添加到包含以下指令的Web站点以引用AuthenticationService类,如以下示例所示: VB

<%@ ServiceHost 
  Language="VB"
  Service="System.Web.ApplicationServices.AuthenticationService" 
  Factory="System.Web.ApplicationServices.ApplicationServicesHostFactory" %>
C#
<%@ ServiceHost 
  Language="C#"
  Service="System.Web.ApplicationServices.AuthenticationService" 
  Factory="System.Web.ApplicationServices.ApplicationServicesHostFactory" %>

在Web.config文件中进行以下配置设置以配置服务并要求SSL: 在authenticationService元素中启用身份验证服务。 在services元素中定义端点契约,在behavior元素中定义服务行为。在端点协定中包含bindingNamespace属性,如以下示例所示,以防止某些代理生成工具中出现异常。有关WCF端点的详细信息,请参阅Windows Communication Foundation端点。 为ASP.NET兼容性配置serviceHostingEnvironment元素。有关托管WCF服务的更多信息,请参阅WCF服务和ASP.NET。 在需要SSL的bindings元素中创建绑定。有关WCF中传输安全性的更多信息,请参阅传输安全性。 以下示例显示Web.config文件中的system.serviceModel元素,该文件显示上一个列表中描述的配置设置。

<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>
To configure forms authentication
In the Web.config file, configure the Web application to use forms authentication.
The following example shows the authentication element in a Web.config file that is configured to use forms authentication.
<authentication mode="Forms">
  <forms cookieless="UseCookies" />
</authentication>

身份验证服务需要Cookie。因此,在身份验证元素中,将cookieless属性设置为&#34; UseCookies&#34;。有关更多信息,请参阅ASP.NET Forms身份验证概述。 安全 如果要传递敏感用户数据(如身份验证凭据),请始终通过安全套接字层(SSL,使用HTTPS协议)访问身份验证服务。有关如何设置SSL的信息,请参阅配置安全套接字层(IIS 6.0操作指南)。