手动编码的令牌传递不是很优雅。它污染你的方法签名,并使你重复检查遍布整个地方。
如果您能够向您的服务客户端分发凭证,或者传递他们已经用于您系统的凭证,那么我建议使用自定义用户名&密码验证程序来使用邮件安全。
实施它的步骤are simple enough。你只需要实现一个UserNamePasswordValidator
:
从链接的文章很短的配置摘要:
指定安全模式在你的绑定:
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
在服务行为添加:
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/>
</serviceCredentials>
然后客户端只需要直接在服务代理上设置他们的凭证。所以他们没有通过服务运营。
serviceClient.ClientCredentials.UserName.UserName = "username";
serviceClient.ClientCredentials.UserName.Password = "password";
你UserNamePasswordValidator
将获得这些证书为每个服务操作调用,你将不得不验证它们对你的凭证存储库的机会。
但是,为了更安全起见,您可以查看certificate authentication。这是更可靠的,你不需要从CA购买证书。如果您还可以在客户端计算机上将自己设置为CA,那么您可以轻松前往。尤其是因为你只有少数客户,所以他们很容易管理。