dig*_*ire 5 c# authentication validation wcf fault
我通过web.config连接了一个带有UserNamePasswordValidator的WCF服务,没问题.在我的验证器中,我重写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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在.NET应用程序中自己使用此服务并提供无效凭据,则会抛出MessageSecurityException并显示以下消息:
"从另一方收到了一个不安全或不正确安全的故障.请参阅内部FaultException以获取故障代码和详细信息."
我预期的FaultException是MessageSecurityException的InnerException.
有没有办法让客户端只接收FaultException?
MessageSecurityException并不特别描述异常的真正原因(对SO的快速搜索会产生各种问题,包括服务器/客户端时间同步......),并且由于第三方将使用该服务,我希望尽可能清楚.
几个月前我遇到了同样的问题,经过一些研究,我得出的结论是,您可以从验证器代码中抛出任何您想要的内容,但客户端仍然会收到 MessageSecurityException,其中根本不包含任何有用的信息。
然而,我们必须让客户知道实际发生了什么 - 1. 用户名/密码错误 2. 密码已过期,需要更改 3. 一些其他自定义应用程序特定状态
因此,我们更改了 CredentialValidator 逻辑,使其仅在情况 1 中抛出异常。在其他情况下,它实际上允许调用真正的 WCF 方法,但我们还会检查密码过期等情况,并且在出现某些问题时抛出异常方法体中已经出现了FaultException。
在我们的例子中,这仅适用于具有这种类型验证的服务(即登录服务)——因此客户端总是知道为什么他没有经过身份验证。
| 归档时间: |
|
| 查看次数: |
3123 次 |
| 最近记录: |