Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用WCF在多个服务之间验证调用方的身份_C#_Wcf_Security - Fatal编程技术网

C# 使用WCF在多个服务之间验证调用方的身份

C# 使用WCF在多个服务之间验证调用方的身份,c#,wcf,security,C#,Wcf,Security,我有一个客户端,它调用一个服务(向它传递用户id和密码)。第一个服务可以针对数据库中的用户验证这些凭据。然后,第一个服务需要调用另一个服务,但无法向第二个服务传递给第一个服务的用户id和密码(这是我无法控制的要求) 这些服务很可能位于不同的域上,并且都暴露在互联网上(因此安全性在这里是一个大问题) 因此,我正在研究第二个服务应该如何检查/验证它是否被我的第一个服务调用(而不是被试图模拟它的其他人调用)的选项 我的一个想法是添加一个作为身份验证服务的附加服务,这可以发出一个令牌,然后传递给第二个

我有一个客户端,它调用一个服务(向它传递用户id和密码)。第一个服务可以针对数据库中的用户验证这些凭据。然后,第一个服务需要调用另一个服务,但无法向第二个服务传递给第一个服务的用户id和密码(这是我无法控制的要求)

这些服务很可能位于不同的域上,并且都暴露在互联网上(因此安全性在这里是一个大问题)

因此,我正在研究第二个服务应该如何检查/验证它是否被我的第一个服务调用(而不是被试图模拟它的其他人调用)的选项

我的一个想法是添加一个作为身份验证服务的附加服务,这可以发出一个令牌,然后传递给第二个服务,第二个服务调用身份验证服务来检查令牌。另一个想法(来自一位同事)是为每个服务分配一个SSL证书,并在调用进入服务器B时检查证书-我还没有看到以这种方式使用的证书,尽管我不确定它是否可行


这仍处于设计阶段,因此我愿意接受其他想法/方法。

如果您需要一个简单的解决方案,那么为服务A创建一组额外的凭据,以便服务B可以确保它是从授权方调用的,而不必知道客户端凭据可能足够


从长远来看,类似的东西听起来与您的身份验证服务计划一模一样。

因此,A和B双方都暴露于互联网(不受信任的环境)。考虑到安全要求,您需要的是相互WCF身份验证。证书是实现这一目标的最简单方法-您的服务器必须确保正确的客户端调用它,并且客户端必须确保它调用正确的服务器(DNS攻击等)。这意味着每一方必须拥有另一方的公钥才能进行身份验证。查看有关如何配置服务器和客户端的详细信息