Javascript 如何在Ajax的网站和服务之间共享身份验证
我有一个网站(MVC4)和WebService(WebAPI)。网站有一个身份验证cookie,它对其进行解密,以便在网站服务器端代码调用该服务时向WebService发送安全令牌。那很好 但是,该网站有JavaScript,我想直接调用WebService。我已经尝试过共享MachineKey和Auth信息,但是cookie没有通过WebApi进行传输 我的退路是通过网站将所有呼叫路由到WebService;但这又丑又慢Javascript 如何在Ajax的网站和服务之间共享身份验证,javascript,asp.net-mvc,asp.net-web-api,forms-authentication,Javascript,Asp.net Mvc,Asp.net Web Api,Forms Authentication,我有一个网站(MVC4)和WebService(WebAPI)。网站有一个身份验证cookie,它对其进行解密,以便在网站服务器端代码调用该服务时向WebService发送安全令牌。那很好 但是,该网站有JavaScript,我想直接调用WebService。我已经尝试过共享MachineKey和Auth信息,但是cookie没有通过WebApi进行传输 我的退路是通过网站将所有呼叫路由到WebService;但这又丑又慢 有什么想法吗?正确答案是达林的。为了在服务站点和网站之间共享登录cook
有什么想法吗?正确答案是达林的。为了在服务站点和网站之间共享登录cookie,它们必须位于同一个域上;例如,服务站点可能位于
http://svc.mysite.com
http://www.mysite.com
该网站可能位于
http://svc.mysite.com
http://www.mysite.com
然后浏览器将允许两个站点共享同一个cookie
另一种方法是让站点向服务站点进行身份验证,并获取某种令牌,该令牌可以传递给javascript。但是,除非您是在HTTPS上运行,否则这将是非常不安全的,因为令牌将“以明文形式”可用
最后一种机制(我认为是最常见的解决方案)是通过网站路由所有API访问,但在许多情况下这并不理想。WebApi和网站是否托管在同一个域上?你是说,你不能将此令牌粘贴到请求头中?是的。尽管如此,我现在还是回到了使用同一个域,这是可行的。所以,达林,如果你想回答这个问题,我会接受的。