WCF:身份验证服务或基于令牌的安全性?(WCF: Authentication Service o

2019-06-26 01:46发布

有一个动态CRM实例的服务器上(“本地”)。 这将通过对遥远的机器上运行(另一个域,其他Active Directory) 的几个站点使用。 这些网站和CRM实例之间的通信是通过CRM代理 ,即靠近它位于(近CRM),处理请求的WCF服务完成后,查询CRM等。

这WCF服务正面临着互联网。 虽然安全通信信道是不必要的,认证。 我们不能让客户随意使用由CRM代理提供的服务。

因此,身份验证服务(饼干?)/手工编码的令牌传递(为每个服务操作的参数)/ 该解决方案-在计算器 。

先感谢您!

PS:手工编码的标记是“时间敏感”,并与一些密钥哈希几次。 人在这方面的中间人可能并不是一个大的问题,作为一个令牌可以请求后失效。

Answer 1:

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

如果你能够凭据分发到您的客户端提供服务,或通过在他们已经在使用你的系统,那么我建议使用邮件安全使用自定义的用户名和密码验证凭据。

步骤来实现它足够简单 。 你只需要实现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将获得这些证书为每个服务操作调用,你将不得不验证它们对你的凭证存储库的机会。

然而,对于更安全,你可以看看证书认证 。 这是更可靠的,你是不是需要从CA购买证书 如果你还可以设置自己的客户端计算机上的CA,那么你的好去。 这是适当的,特别是因为你只有几个客户,所以他们很容易管理。



Answer 2:

对于preivous回答上面的问题是不够好。 不过,我想建议另一种方法:自定义令牌认证。

它是给人一种可能性,创建/支持这是基于认证令牌(用户名)创建的自定义服务凭据更多飞机的强大动力。

在我来说,我已经加密保存用于该访问所有需要的信息访问令牌:用户名,用户组(认证信息),有效期,等。

在你的情况下,它可以是用户名和密码。 证书将举行有关用户的信息,并可以在后面的代码上使用。

请参阅以下链接,实现自定义的令牌认证: https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/token-authenticator



文章来源: WCF: Authentication Service or token-based security?