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