【发布时间】:2017-09-27 03:23:47
【问题描述】:
[OperationContract]
string Security(string userName, string Password);
[OperationContract]
void XXX(XXX);
[OperationContract]
void YYY(YYY);
在我的 WCF 服务中,我需要通过在安全方法上传递凭据来调用 void XXX
【问题讨论】:
标签: wcf
[OperationContract]
string Security(string userName, string Password);
[OperationContract]
void XXX(XXX);
[OperationContract]
void YYY(YYY);
在我的 WCF 服务中,我需要通过在安全方法上传递凭据来调用 void XXX
【问题讨论】:
标签: wcf
虽然您可以将凭据作为每个方法的参数传递(更不用说可能不安全),但它变得相当乏味。而是使用 WCF 的自定义用户身份验证行为。每次调用方法(确实收到消息)时都会自动调用它们。它还使方法更简洁,因为它们没有在任何地方填充用户名/密码。
MSDN:
默认情况下,当使用用户名和密码进行身份验证时,Windows Communication Foundation (WCF) 使用 Windows 来验证用户名和密码。但是,WCF 允许自定义用户名和密码身份验证方案,也称为验证器。要合并自定义用户名和密码验证器,请创建一个派生自 UserNamePasswordValidator 的类,然后对其进行配置。
无论您的服务是 DataContract 还是 MessageContract,这些行为都会起作用。
这些凭据经过加密并存储在消息标头中,而不是其他参数通常驻留的消息正文中。
调用服务一次进行身份验证,然后再次执行一些操作的另一个问题是,您实际上强制服务是有状态的,你可能不想要。通过将有关身份验证的信息与操作一起放在同一消息中,发送的消息减半;提高性能,更重要的是,如果需要,允许您的服务成为无状态的选项,可能会进一步提高性能。
【讨论】: