目前,我有一项使用UserNamePasswordValidator
来验证客户端用户的服务。验证的代码如下:
public override void Validate(String userName, String password)
{
if (userName == null) || (password == null)
throw new FaultException("Username and/or password not specified.");
if (userName != "test") && (password != "tset")
throw new FaultException("Invalid username and/or password.");
}
正如您所看到的,代码将在出现错误时始终抛出异常。
现在提出问题 - 我有理由在我的ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated
函数中检查OperationContract
是否为真?例如,
public interface IMyService
{
[OperationContract]
void myOpContract();
}
public class MyService : IMyService
{
public void myOpContract()
{
// Do I really need this conditional statement?
if (ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated)
// Proceed as expected
else
// Fail?
}
}
非常感谢任何帮助。
答案 0 :(得分:1)
通过本文中的几条评论 - Silverlight 3: Securing your WCF service with a custom username / password authentication mechanism以及各种测试 - if ([...]PrimaryIdentity.IsAuthenticated)
部分不是必需的。在UserNamePasswordValidator
内抛出错误会导致中止安全协商。
但是,代表作者的一个好主意是,保留if ([...]PrimaryIdentity.IsAuthenticated)
条件语句有助于将来添加新绑定(连接类型)而没有安全性。