Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Ajax的网站和服务之间共享身份验证_Javascript_Asp.net Mvc_Asp.net Web Api_Forms Authentication - Fatal编程技术网

Javascript 如何在Ajax的网站和服务之间共享身份验证

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

我有一个网站(MVC4)和WebService(WebAPI)。网站有一个身份验证cookie,它对其进行解密,以便在网站服务器端代码调用该服务时向WebService发送安全令牌。那很好

但是,该网站有JavaScript,我想直接调用WebService。我已经尝试过共享MachineKey和Auth信息,但是cookie没有通过WebApi进行传输

我的退路是通过网站将所有呼叫路由到WebService;但这又丑又慢


有什么想法吗?

正确答案是达林的。为了在服务站点和网站之间共享登录cookie,它们必须位于同一个域上;例如,服务站点可能位于

http://svc.mysite.com
http://www.mysite.com
该网站可能位于

http://svc.mysite.com
http://www.mysite.com
然后浏览器将允许两个站点共享同一个cookie

另一种方法是让站点向服务站点进行身份验证,并获取某种令牌,该令牌可以传递给javascript。但是,除非您是在HTTPS上运行,否则这将是非常不安全的,因为令牌将“以明文形式”可用


最后一种机制(我认为是最常见的解决方案)是通过网站路由所有API访问,但在许多情况下这并不理想。

WebApi和网站是否托管在同一个域上?你是说,你不能将此令牌粘贴到请求头中?是的。尽管如此,我现在还是回到了使用同一个域,这是可行的。所以,达林,如果你想回答这个问题,我会接受的。