gpt4 book ai didi

c# - 仅在 WCF Web 服务中需要某些方法的凭据

转载 作者:行者123 更新时间:2023-11-30 12:16:16 26 4
gpt4 key购买 nike

我有一个具有不同方法的 UserAccountService,其中一些方法需要对用户进行身份验证(例如 ChangePassword、ChangeUserData),而另一些则不需要(RegisterUser)。

但是我似乎无法让它工作,所以只有一些方法需要身份验证。

需要认证的方法用

修饰
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]

在我的 app.config 中,我指定了一个绑定(bind),它使用加密并请求用户名凭据:

    <binding name="authenticatedBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>

(我正在使用 basicHttpBinding)

我还配置了自定义身份验证提供程序:

      <serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="..." />
</serviceCredentials>

使用此配置,我似乎无法在未经身份验证的情况下调用服务上的任何方法。

如果我省略了安全配置,那么我可以调用不需要身份验证的方法,但不再传输消息凭据。

我必须如何配置我的服务,以便它允许调用所有方法并且只需要在 PrincipalPermission 要求时设置用户名/密码?

我正在使用 Silverlight 作为我的客户端,如果这很重要的话......

谢谢!

最佳答案

安全设置可以在端点级别进行细化,但不能在契约(Contract)中进行细化 - 因此您无法以所需的方式组合安全和不安全的方法。我会建议

  1. 您将服务契约(接口(interface))分成两部分 - 一部分用于不安全的方法。其次,将从不安全的部分继承,并将包含需要保护的操作。
  2. 您的服务实现不需要更改(因为它应该实现安全接口(interface))- 您需要做的就是在两个不同的端点将此实现公开为两个不同的契约(Contract)(在安全和另一个不安全的契约(Contract)上)。您需要使用所需的任何安全配置通过安全契约(Contract)锁定端点。
  3. 不幸的是,从客户端的角度来看,您必须在身份验证边界切换端点/URL,即在用户通过身份验证之前,您可以使用不安全的端点,但一旦通过身份验证,客户端就可以使用任何端点。

关于c# - 仅在 WCF Web 服务中需要某些方法的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com