使用 WCF 进行身份验证

本文关键字:身份验证 WCF 使用 | 更新日期: 2023-09-27 18:31:19

我有一个 WCF 应用程序,我想向某些人公开,但要让他们使用该服务,我想以某种方式对他们进行身份验证,是否可以创建我自己的成员资格提供程序,该提供程序将通过调用 ValidateUser 方法来检查用户是否经过验证?另外,我将如何告诉我的绑定/行为使用此成员资格提供程序?

编辑

我也对此有一些疑问。例如:如果我从客户端调用名为 QueryStock 的 Web 服务方法。它是在触发方法之前首先使用我的会员资格提供程序验证用户,还是必须将用户名和密码作为参数,然后在执行方法中的代码之前执行Membership.ValidateUser(username, password)

使用 WCF 进行身份验证

这都可以用 WCF 来实现,我现在正在将它用于我们拥有的 WCF 服务。

您可以创建自己的成员资格提供程序(就像您为 asp.net 应用程序所做的那样),然后将其也探测到 WCF 中。如果您用谷歌搜索"WCF 会员提供商",则有大量关于此的信息。这篇文章也可能对您有所帮助: 使用 SQL 成员资格提供程序的 WCF 身份验证

是的,这是可能的。看看这篇文章,它显示了使用自定义提供程序的示例。

我也有这个问题:在 WCF 中对每个调用进行身份验证

如您所见,您可以使用 ASP.NET 身份验证。

如果您有自己的方法来验证用户,我会尝试使用一种外观来调用每个带有用户 + 令牌的服务方法,并保持一种"异步会话"。

因此,您可以在用户首次登录时创建一个新令牌,然后在每次调用中,然后在下一次调用中使用它。仅使用带有用户 + 令牌的表来保护所有调用。

您需要在配置中定义行为,例如:

<behaviors>
  <serviceBehaviors>
    <behavior name="Framework.Services.FrameworkBehaviour">
      ...
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="CustomProvider" />
      <serviceCredentials>
        <serviceCertificate ... />
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="...." />
      </serviceCredentials>
    </behavior>

这是绑定代码段:

   <binding name="userNamePassOverSsl" ...>
      <security mode="TransportWithMessageCredential">
        <transport  />
        <message clientCredentialType="UserName" />
      </security>
    </binding>