我现在正在使用安全性,我必须在网络电话之前设置ClientCredentials。
这是一个重复的事情,因为我有很多网络电话总是传递相同的东西。
避免不得不做这种事情的好模式是什么?
答案 0 :(得分:2)
WCF实现WS-SecureConversation。这允许客户端仅传递一次凭据,后续调用自动使用客户端和服务之间的安全对话握手生成的安全令牌。在WCF中,这称为安全上下文或安全会话,默认情况下它通常在wsHttpBinding
中打开。使用安全上下文时,您必须遵循基本规则:
如果不遵循这种方法,您可以实现自定义SOAP标头和消息检查器,它将在客户端包含标头并检查服务器端的标头。此解决方案完全在WCF安全管道之外,不能与WCF中的常用用户名和密码组合。您还必须单独发送用户名和密码。
如果要在WCF管道中包含自定义解决方案,您可以期待非常复杂的任务,因为将此类解决方案集成到WCF安全管道需要自定义授权策略,cutom令牌,令牌管理器,令牌验证器,令牌解析器和客户端凭据。
但据我了解您的问题,您不喜欢在每次通话前设置凭据 - 这意味着您正在为每次通话使用新代理。因此,您将编写大量代码,这将导致您不需要为后续调用设置用户名和密码,但您必须设置将在服务上验证的自定义令牌。您还必须在服务上管理这些令牌。
创建一些用于调用Web服务的包装器可能更容易,它将设置用户名和密码。
答案 1 :(得分:1)
良好的模式是在授权后将会话令牌从服务发送到客户端,然后在每次调用而不是凭据时发送它。