gpt4 book ai didi

c# - WCF:身份验证服务还是基于 token 的安全性?

转载 作者:太空狗 更新时间:2023-10-29 20:03:19 25 4
gpt4 key购买 nike

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

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

因此,身份验证服务(cookies?)/手工编码的 token 传递(作为每个服务操作的参数)/this solution - on stackoverflow .

提前致谢!

PS:手工编码的 token 将是“时间敏感的”,并使用一些 secret key 进行几次哈希处理。中间人可能不是什么大问题,因为 token 可以在请求后失效。

最佳答案

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

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

实现步骤are simple enough .你只需要实现一个 UserNamePasswordValidator :

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

在绑定(bind)中指定安全模式:

<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,那么您就可以开始了。这很合适,尤其是因为您只有几个客户,所以他们很容易管理。

关于c# - WCF:身份验证服务还是基于 token 的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11349539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com