[英]WCF: How to validate credentials in a void method?
我想将自己的WCF服务与凭据一起使用,因此我观看了一些教程,以了解如何做到这一点,并得出了从“ UserNamePasswordValidator”类继承并覆盖Validate方法的解决方案。 我可以在App.config中设置此类:
public class UNValidator : UserNamePasswordValidator
{
public UNValidator() : base()
{
}
public override void Validate(string userName, string password)
{
if (userName == "user" && password == "secret")
return;
throw new System.IdentityModel.Tokens.SecurityTokenException(
"Unknown Username or Password");
}
}
Validate方法无效! 我在服务器应用程序中使用WCF服务,当有人要登录并输入错误时,服务器将崩溃。 如何拒绝错误的用户登录而不会引发异常?
任何帮助表示赞赏。
以我自己构建Web门户的经验,我不使用自定义UserNamePasswordValidator
方法来验证用户,而是创建应用程序密钥/密码并对其进行验证。
之后,我将拥有自己的身份验证服务(在本例中,我正在对AD用户进行身份验证),并且如果凭据不匹配,则会抛出异常。 在这些情况下,您可以完全控制异常,并且可以根据需要处理它们。
如果您是我,请执行以下操作:
我通过尝试和错误找到了解决方案。
如我所想,它更简单,只需中止线程:
public override void Validate(string userName, string password)
{
if (userName == "test" && password == "test")
return;
System.Threading.Thread.CurrentThread.Abort();
}
如果线程异常终止,则客户端将显示错误“ 403:未经授权”,并且服务器应用程序将继续运行。
调用方法时,请使用try / catch块来处理异常。
try
{
//Logging in.
var validator = new UNValidator();
validator.Validate(username, password);
//Anything written past this point means your login was successful.
}
catch
{
//Catch the exception here, which means invalid login.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.