代码之家  ›  专栏  ›  技术社区  ›  Andy T

使用jquery访问受保护的REST端点

  •  2
  • Andy T  · 技术社区  · 16 年前

    我有一个网站,会员登录他们的帐户(formsauth)。我想建立一个使用jquery可以访问的RESTful服务。我想使用相同的formsauth来保护这些服务。

    第三方网站如何能够访问这些服务?他们需要将委托人/身份信息传递给服务部门,对吗?

    我只看到了基本认证的例子(Twitter使用和jquery支持)。

    我对wct/rest很陌生,所以不知道该怎么做。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Kevin Hoffman    16 年前

    要记住的一件大事是表单身份验证基于cookie工作。当客户机浏览器向服务器发送请求时,它会随每个请求一起发送cookie。如果服务器需要一个特定的cookie(如果在特定的URL上强制认证,ASP.NET将此作为一项要求),而cookie不在,则会出现未经授权的错误。

    为了获得jquery代码,客户机必须从主机页请求它,主机页可能是通过窗体身份验证保护的ASP.NET页。这是第一步—保护对jquery代码本身的访问。接下来需要做的是安全地访问RESTful端点。

    如果将.svc终结点(假定您在IIS中承载RESTful WCF服务)与应用程序的一部分(该部分受通过web.config设置进行的表单身份验证保护)放在同一目录中,则ASP.NET将在通知wcf有关该请求之前拒绝对.svc终结点的请求。以这种方式,您可以将WCF服务包装为表单身份验证,而不必在服务中进行任何复杂的编码。

    由于jquery在向端点发出HTTP请求时是从浏览器的上下文中发出的,因此jquery发出的HTTP请求(只要jquery是从与表单身份验证站点相同的根目录加载的)将包含身份验证cookie。

        2
  •  0
  •   Till    16 年前

    你可以使它复杂化并使用一个令牌。 Flickr 是这种授权机制的一个例子。

    理论上,令牌的有效期是如此之长,您可以在请求中传递它,等等。不过,这里不是很安静(imho)。但您基本上提供了一种方法,它返回令牌,并可能返回一个日期(供其他应用程序记住),然后另一个应用程序使用该令牌,直到它到期,也就是说,它必须请求一个新的令牌。