寻找一些建议(或者甚至是直接回答)。
我有一个MVC3网站。我还有一组运行的WCF服务(现在一切都在同一个盒子里)。
我尝试做的是验证客户端(该部分工作正常),然后将该经过身份验证的用户传递给各种WCF调用。
目前我已经在Application_AuthenticateRequest()
中连接了Global.Asax
方法,归结为创建新的GenericIdentity & GenericPrincipal
,然后将该主体分配给HttpContext.Current.User
:< / p>
...
GenericIdentity identity = new GenericIdentity(userName);
GenericPrincipal principal = new GenericPrincipal(identity, null);
HttpContext.Current.User = principal;
...
这部分似乎也很好。
但是当我点击我的服务时,我完全失去了我设置的用户。值为空或假。
我注意到的一个主要问题是,在客户端,HttpContext.Current.User.Identity
对象的类型为{System.Web.Security.FormsIdentity}
,但在服务中它的类型为{System.Security.Principal.WindowsIdentity}
。
根据我读过的一些内容,听起来只是简单地修改我的web.config
,因此它包含aspNetCompatibilityEnabled="true"
可能足以使其正常工作。但那不是我所看到的。所以要么我不理解一切(非常好的可能性),要么我搞砸了(另一种可能性很大)。
所以我的问题。这是否可能,如果是这样的话 - 想想我错过了什么?我注意到其他一些人发布了类似的内容,但从未得到明确答复(见here和here)。
非常感谢任何建议。
答案 0 :(得分:2)
我无法直接回答你的问题,但希望能帮助你找到明确的答案。
您有2个服务层,似乎您的要求是在所有层之间共享身份验证身份。
因此,原则上,您需要(至少)相同的身份验证机制或算法或技术来实现此目的。但此时您没有使用相同的内容(当您看到FormsIdentity
和WindowsIdentity
时,您注意到了。
事实:
问题:
所以......如果不知道你的要求,我会先建议你:
我已经看过很多次了。没有私有服务的身份验证是一个很好的性能协议,但是你需要采取预防措施,因为大多数IT攻击都来自内部局域网。