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

时间:2013-02-08 13:26:13

标签: javascript asp.net-mvc asp.net-web-api forms-authentication

我有一个WebSite(MVC 4)和WebService(Web API)。 WebSite有一个身份验证cookie,它会对其进行解密,以便在WebSite服务器端代码调用服务时将安全令牌发送到WebService。这很好。

但是,WebSite有JavaScript,我想直接调用WebService。我已尝试共享MachineKey和Auth信息,但cookie并未通过WebApi传输。

我的后备是通过WebSite将所有调用路由到WebService;但那很难也很慢。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

http://svc.mysite.com

网站可能在

http://www.mysite.com

然后浏览器将允许两个站点共享相同的cookie。

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

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