我有一个ASP MVC网站,我们称之为WebSite。两个服务Service1和Service2。从WebSite我调用Service1,从Service1调用Service2。在WebSite中,我使用Windows身份验证。我想从WebSite呼叫具有用户权限的Service2。我读过关于双重模仿和授权的内容,但我想澄清一些事情......如果我在同一台机器上托管WebSite和两个服务,我还需要使用委托吗?我是如何在code / web.config中实际执行此操作的? 我用WebSite调用Service1((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()并且这很好,但是当我尝试从Service1调用Service2时,ServiceSecurityContext.Current.WindowsIdentity.Impersonate()抛出异常。 那么,我该怎么做呢?
答案 0 :(得分:0)
您的网络服务中没有HttpContext.Current
。它是null
,正如例外可能告诉你的那样。您可以从Web服务中的Thread.CurrentPrincipal
获取当前用户。
答案 1 :(得分:0)
由于Service1
和Service2
未对公共访问开放,您可以使用一些自定义参数来指示用户,他/她的角色或他/她的权限。我想这是最简单的解决方案。
更结构化的解决方案是对两个站点使用相同的身份验证领域。这不是很容易。 This可以让您更好地了解如何操作。
希望我帮忙!