【问题标题】:WCF: Authentication Service or token-based security?WCF:身份验证服务还是基于令牌的安全性?
【发布时间】:2012-07-06 03:57:37
【问题描述】:

服务器上有一个Dynamic CRM实例(“本地”)。 少数站点将使用它,这些站点在远程计算机(另一个域、另一个 Active Directory)上运行。这些站点和 CRM 实例之间的通信是通过 CRM 代理 完成的,这是一个位于它附近(靠近 CRM)的 WCF 服务,用于处理请求、查询 CRM 等。

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

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

提前谢谢你!

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

【问题讨论】:

    标签: c# wcf rest dynamics-crm-2011


    【解决方案1】:

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

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

    实现它的步骤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,那么您就可以开始了。这很合适,特别是因为您只有几个客户,所以他们很容易管理。

    【讨论】:

      【解决方案2】:

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

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

      就我而言,我已经加密了访问令牌,其中包含访问所需的所有信息:用户名、用户组(授权信息)、验证期等。

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

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

      【讨论】:

      • 嗯,我的回答是从 2012 年开始的。我会说现在使用基于令牌的身份验证。
      猜你喜欢
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2010-12-24
      • 2017-03-21
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多