【问题标题】:How can I authenticate using client credentials in WCF just once?如何在 WCF 中只使用一次客户端凭据进行身份验证?
【发布时间】:2008-08-27 18:23:20
【问题描述】:

在使用基于 WCF 构建的 API 时,确保您只需要进行一次身份验证的最佳方法是什么?

下面列出了我当前的绑定和行为

    <bindings>
        <wsHttpBinding>
            <binding name="wsHttp">
                <security mode="TransportWithMessageCredential">
                    <transport/>
                    <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="true"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    </behaviors>

接下来是我在客户端应用程序中用来进行身份验证的内容(目前我每次想调用 WCF 时都必须这样做)

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "foo"
client.ClientCredentials.UserName.Password = "bar"
Dim ProductList As List(Of Product) = client.GetProducts()

我想做的是使用这些凭据通过 API 进行身份验证,然后在我的客户端应用程序使用 Web 服务项目的时间段内获取某种类型的令牌。我认为establishsecuritycontext=true 是为我做的吗?

【问题讨论】:

    标签: wcf security authentication ws-security


    【解决方案1】:

    如果您在 Intranet 上,则可以仅通过配置“免费”处理 Windows 身份验证。

    如果这不合适,令牌服务可以正常工作,但在某些情况下它们可能太多了。

    我正在开发的应用程序需要基本身份验证。我们的服务器和客户端在(非常安全的)Intranet 中运行,因此我们不太关心使用 X.509 证书对通信进行加密的要求,如果您使用用户名身份验证,这是必需的。

    因此,我们向客户端添加了custom behavior,将用户名和(加密的)密码添加到消息头中,并在服务器上验证它们的另一个自定义行为。

    一切都非常简单,无需更改客户端服务访问层或服务合同实现。由于这一切都是通过配置完成的,所以如果我们需要迁移到更强大的东西,它会很容易迁移。

    【讨论】:

      【解决方案2】:

      虽然我不想给出一个我不能 100% 确定的答案,但到目前为止,由于缺乏回应,我认为在这种情况下,一个可能正确的答案可能是可以的。

      据我所知,WCF 并没有您正在寻找的那种开箱即用的会话令牌机制,这意味着您将不得不做一些繁重的工作才能得到东西以您想要的方式工作。我应该明确指出,WCF 中有一个会话机制,但它专注于保证消息顺序,并不是创建身份验证会话的理想工具。

      我刚刚完成了一个项目,在该项目中我们实现了自己的会话机制来处理各种遗留 SOAP 堆栈,但我认为实现经过身份验证的会话的推荐方法是使用安全令牌服务 (STS),例如 Pablo Cibraro's .

      如果您想了解更多详细信息,请大声疾呼,但我怀疑 Pablo 的博客将提供足够多的信息让您继续前进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-19
        • 2019-06-04
        • 2011-04-09
        • 2013-10-07
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        相关资源
        最近更新 更多