我想将我的自托管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");
}
}
验证方法无效!? 我在我的服务器应用程序中使用WCF服务,当有人想要登录并输入错误时服务器将崩溃。如何在不抛出异常的情况下拒绝错误的用户登录?
任何帮助表示感谢。
答案 0 :(得分:0)
根据我自己构建Web门户的经验,我不使用自定义UserNamePasswordValidator
方法来验证用户,但我创建了一个应用程序密钥/密码并对其进行了验证。
之后,我有自己的身份验证服务(在我的情况下,我正在验证AD用户),如果凭据不匹配,我抛出异常。 通过这些方案,您可以完全控制异常,并可以按照自己的意愿处理它们。
如果我是你,我会做以下事情:
答案 1 :(得分:0)
我通过尝试和错误找到了解决方案。
我认为它更简单,只需中止线程:
public override void Validate(string userName, string password)
{
if (userName == "test" && password == "test")
return;
System.Threading.Thread.CurrentThread.Abort();
}
如果线程被中止,则客户端会收到错误" 403:Unauthorized" 并且服务器应用程序继续运行。
答案 2 :(得分:-1)
在调用方法时使用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.
}