2012-07-05 169 views
5

在服务器(“本地”)上有一个动态CRM实例。它将用于几个网站,它们运行在远程机器上(另一个域,另一个Active Directory)。这些站点与CRM实例之间的通信通过CRM代理,位于其附近(靠近CRM)的WCF服务,处理请求,查询CRM等完成。WCF:身份验证服务或基于令牌的安全性?

WCF服务面向Internet。尽管安全通信渠道不是必需的,但认证是。我们不能让随机客户端使用CRM代理提供的服务。

所以,身份验证服务(cookie?)/手写编码令牌传递(作为每个服务操作的参数)/ this solution - on stackoverflow

预先感谢您!

PS:手动编码的令牌将是“时间敏感的”,并用一些秘密密钥散列几次。中间人可能不是一个很大的问题,因为在请求后令牌可能失效。

回答

8

手动编码的令牌传递不是很优雅。它污染你的方法签名,并使你重复检查遍布整个地方。

如果您能够向您的服务客户端分发凭证,或者传递他们已经用于您系统的凭证,那么我建议使用自定义用户名&密码验证程序来使用邮件安全。

实施它的步骤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,那么您可以轻松前往。尤其是因为你只有少数客户,所以他们很容易管理。

相关问题