gpt4 book ai didi

c# - UserNamePasswordValidator 可以抛出 MessageSecurityException 以外的任何东西吗?

转载 作者:太空狗 更新时间:2023-10-29 23:25:39 24 4
gpt4 key购买 nike

我有一个 WCF 服务通过我的 web.config 连接了一个 UserNamePasswordValidator,没问题。在我的验证器中,我覆盖了 Validate,检查凭据并在必要时抛出 FaultException。

例子:

public class CredentialValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (userName != "dummy")
{
throw new FaultException<AuthenticationFault>(new AuthenticationFault(), "Invalid credentials supplied");
}
}
}

如果我自己在 .NET 应用程序中使用此服务并提供无效凭据,则会抛出 MessageSecurityException 并显示以下消息:

“从另一方收到了不安全或不正确的安全错误。有关错误代码和详细信息,请参阅内部 FaultException。”

我预期的 FaultException 是 MessageSecurityException 的 InnerException。

有没有办法让客户端只接收 FaultException?

MessageSecurityException 并没有特别描述异常的真正原因(对 SO 的快速搜索会产生各种问题,包括服务器/客户端时间同步..),并且由于第三方将使用该服务,我希望尽可能清楚。

最佳答案

几个月前我遇到了同样的问题,经过一些研究后我得出结论,你可以从验证器代码中抛出任何你想要的东西,但客户端仍然会得到 MessageSecurityException,它根本不包含任何有用的信息。

但是,我们必须让客户知道实际发生了什么 - 1.用户名/密码错误 2.密码过期,需要更改 3. 其他一些自定义应用程序特定状态

因此,我们更改了 CredentialValidator 逻辑,使其仅在情况 1 中抛出异常。在其他情况下,它实际上允许调用真正的 WCF 方法,但我们也会检查密码过期等,以及在以下情况下一些问题已经从方法主体抛出 FaultException。

在我们的例子中,这只适用于使用这种类型的验证的服务是登录服务 - 所以客户总是知道为什么他没有通过身份验证。

关于c# - UserNamePasswordValidator 可以抛出 MessageSecurityException 以外的任何东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594265/

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