Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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_Web Services - Fatal编程技术网

C# 已验证的WCF:获取当前安全上下文

C# 已验证的WCF:获取当前安全上下文,c#,wcf,web-services,C#,Wcf,Web Services,我有以下情况: 我的数据库中存储了各种用户数据 此数据是通过web应用程序输入的 我们希望通过web服务向用户公开这些数据,以便他们能够将数据与应用程序集成 我们还想公开这些服务上的一些业务逻辑。因此,我们不想使用OData。 这是一个多租户应用程序,所以我只想向他们而不是其他用户公开他们的数据。同样,我们公开的业务逻辑应该与经过身份验证的用户相关 我想让用户使用OASIS方案对web服务进行身份验证——据我所知,WCF已经允许这种开箱即用的方式——或者我们可以向他们颁发证书进行身份验证。这

我有以下情况:

  • 我的数据库中存储了各种用户数据
  • 此数据是通过web应用程序输入的
  • 我们希望通过web服务向用户公开这些数据,以便他们能够将数据与应用程序集成
  • 我们还想公开这些服务上的一些业务逻辑。因此,我们不想使用OData。
  • 这是一个多租户应用程序,所以我只想向他们而不是其他用户公开他们的数据。同样,我们公开的业务逻辑应该与经过身份验证的用户相关
我想让用户使用OASIS方案对web服务进行身份验证——据我所知,WCF已经允许这种开箱即用的方式——或者我们可以向他们颁发证书进行身份验证。这一点还没有真正解决

下面是一段伪代码,描述了我设想这将如何在服务中工作:

function GetUsersData(id) 
 var user := Lookup User based on Username from Auth Context
 var data := Get Data From Repository based on "user"
 return data
end function
对于业务逻辑场景,我认为应该是这样的:

function PerformBusinessLogic(someData)
 var user := Lookup User based on Username from Auth Context
 var returnValue := Perform some logic based on supplied data
 return returnValue
end function
这里的难点是获取用户通过身份验证的当前用户名(或证书场景中的证书信息)

WCF甚至启用了这个场景吗?如果不是,WSE3会启用此功能吗


谢谢,

应该不会太难,我认为:

  • 如果您的用户在WCF服务中使用Windows用户凭据进行身份验证,您将能够在下找到他们的凭据

    ServiceSecurityContext.Current.WindowsIdentity
    
  • 如果您的用户使用证书进行身份验证,您将在下面找到他们的身份(将是CertificateIdentity而不是WindowsIdentity)

如果有Windows身份,您还可以模拟该呼叫者,以便后续呼叫进入您的业务或数据层,如果需要的话-查看MSDN文档,或者“WCF模拟”的Google或Bing应该会为您提供大量关于该主题的有价值链接

如果Windows和证书路径对您都不起作用,WCF还允许您创建自己的自定义身份验证方案,在这种情况下,您需要为WCF编写一个扩展,并将其插入,然后您将收到发送给您的呼叫用户的用户名/密码,以便根据您可能拥有的任何自定义存储进行验证


WCF在许多方面给了您很多灵活性-我非常怀疑您是否会发现一个场景在WSE3中可以工作,但在WCF中却不能同样好(或更好)地工作

太棒了,谢谢!这正是我希望得到的信息,出于某种原因,我想我一定是在文档中遗漏了这一点。我也在努力让它继续下去。我希望看到它在本地机器上运行,从测试客户端运行,也在本地机器上运行。我已经设置了SSL和适当的(我认为)HTTPS绑定配置。我看到当前上下文为null,而匿名上下文虽然不是null,但没有我期望的值,因为用户名是空字符串。是否有一些IIS设置需要更改?突然ServiceSecurityContext.Current.PrimaryIdentity开始工作,不再为null,并且我看到预期的用户名在调试行中被吐出,但VS调试器不会调试我的web服务器,因为某些配置不正确。如果他们使用窗体身份验证进行身份验证,该怎么办?我们有相同的场景,但是我们的用户使用表单进行身份验证。@esteban araya:在这种情况下应该设置
.PrimaryIdentity
ServiceSecurityContext.Current.PrimaryIdentity