C# WCF:身份验证服务还是基于令牌的安全性?

C# WCF:身份验证服务还是基于令牌的安全性?,c#,wcf,rest,dynamics-crm-2011,C#,Wcf,Rest,Dynamics Crm 2011,服务器上有一个动态CRM实例(“内部部署”)。它将被运行在远程机器(另一个域,另一个Active Directory)上的少数站点使用。这些站点与CRM实例之间的通信是通过CRM代理来完成的,该代理是位于其附近(CRM附近)的WCF服务,用于处理请求、查询CRM等 WCF服务面向互联网。虽然没有必要使用安全的通信通道,但身份验证是必要的。我们不能让随机客户使用CRM代理提供的服务 因此,身份验证服务(cookies?)/手工编码的令牌传递(作为每个服务操作的参数)/ 提前谢谢你 PS:手工编码的

服务器上有一个动态CRM实例(“内部部署”)。它将被运行在远程机器(另一个域,另一个Active Directory)上的少数站点使用。这些站点与CRM实例之间的通信是通过CRM代理来完成的,该代理是位于其附近(CRM附近)的WCF服务,用于处理请求、查询CRM等

WCF服务面向互联网。虽然没有必要使用安全的通信通道,但身份验证是必要的。我们不能让随机客户使用CRM代理提供的服务

因此,身份验证服务(cookies?)/手工编码的令牌传递(作为每个服务操作的参数)/

提前谢谢你


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

手工编码的令牌传递不是很优雅。它污染了你的方法签名,让你到处重复检查

如果您能够将凭据分发给您的服务客户端,或者传入他们已经用于您的系统的凭据,那么我建议使用自定义用户名和密码验证器的消息安全性

实施它的步骤。您只需要实现一个:

链接文章中的简短配置摘要:

指定绑定中的安全模式:

<security mode="Message">
    <message clientCredentialType="UserName"/>
</security>
您的
UserNamePasswordValidator
将为每个服务操作调用获取这些凭据,您将有机会根据凭据存储验证这些凭据


但是,为了更安全,您可以查看。它更可靠,而且您不需要从CA购买证书。如果您还可以在客户端计算机上将自己设置为CA,那么您的证书就可以使用了。这非常合适,特别是因为你只有几个客户,所以他们很容易管理。

对于上面的问题,前面的答案已经足够好了。但是,我想建议另一种方法:自定义令牌身份验证

通过提供创建/支持基于身份验证令牌(用户名)创建的自定义服务凭据的可能性,它更强大

在我的例子中,我有加密的访问令牌,它保存了访问所需的所有信息:用户名、用户组(授权信息)、验证期等

在您的情况下,它可以是用户名和密码。凭证将保存有关用户的信息,稍后可在代码中使用

请参阅以下链接以实现自定义令牌身份验证:

我的答案是2012年的。我想说现在使用基于令牌的身份验证。
<serviceCredentials>
    <userNameAuthentication 
        userNamePasswordValidationMode="Custom" 
        customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/>
</serviceCredentials>
serviceClient.ClientCredentials.UserName.UserName = "username";
serviceClient.ClientCredentials.UserName.Password = "password";