【问题标题】:Double Impersonation - from Web Site to Service to Service双重模拟 - 从网站到服务再到服务
【发布时间】:2014-03-06 01:12:26
【问题描述】:

我有一个 ASP MVC 网站,我们称之为网站。还有两个服务Service1和Service2。从网站我调用Service1,从Service1 我调用Service2。在网站中,我使用 Windows 身份验证。我想从具有用户权限的网站调用 Service2。我已经阅读过双重模拟和委托,但我想澄清一些事情。如果我在同一台机器上托管网站和两个服务,我还需要使用委托吗?以及我实际上是如何在 code/web.config 中做到这一点的? 我使用 ((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate() 从 WebSite 调用 Service1,这工作正常,但是当我尝试从 Service1 调用 Service2 时,ServiceSecurityContext.Current.WindowsIdentity.Impersonate() 抛出异常。 那么,我该怎么做呢?

【问题讨论】:

  • 我解决了。问题是,我没有将服务的模拟级别设置为模拟。

标签: c# asp.net asp.net-mvc wcf impersonation


【解决方案1】:

您的网络服务中没有HttpContext.Current。这是null,例外情况可能已经告诉你了。您可以在网络服务中从Thread.CurrentPrincipal 获取当前用户。

【讨论】:

  • 我的错误.. 我使用了 ServiceSecurityContext.Current.WindowsIdentity.Imperosnate().. 但是当我调用 Service2 时它抛出异常无法加载文件或程序集'System.IdentityModel.Selectors ...跨度>
【解决方案2】:

由于Service1Service2 不向公众开放访问,您可以使用一些自定义参数来调用它们,指示用户、他/她的角色或他/她的权限。我想这将是最简单的解决方案。

更结构化的解决方案是对两个站点使用相同的身份验证领域。这并不容易。 This 会让您更好地了解如何做到这一点。

希望我能帮上忙!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多