【发布时间】:2011-06-03 20:20:40
【问题描述】:
我有一个 asp.net Web 应用程序,在其中我使用几个我们的服务来服务几个 ajax 请求。问题是如何判断对应的调用是否来自我服务过的页面。 我在我的页面中使用表单身份验证。有什么方法可以授权用户通过相同的表单身份验证调用 weservice。
【问题讨论】:
标签: asp.net ajax web-services formsauthentication
我有一个 asp.net Web 应用程序,在其中我使用几个我们的服务来服务几个 ajax 请求。问题是如何判断对应的调用是否来自我服务过的页面。 我在我的页面中使用表单身份验证。有什么方法可以授权用户通过相同的表单身份验证调用 weservice。
【问题讨论】:
标签: asp.net ajax web-services formsauthentication
这让我想起了old question I already answered to。你的场景不同,但根本问题是一样的:如果你从 Web 窗体调用 Web 服务,如何与窗体共享身份验证数据?
对此没有简单且形式接近的解决方案。您可以考虑在 Web 服务中实现 WS-Security,并在检查用户是否已获得授权后让 Web 表单 对 Web 服务进行身份验证。
Web 服务不会共享有关用户登录的信息,除非作为参数方法显式传递(即void PerformAction(string userId, ...)),但请记住,在这种情况下,视角会发生巨大变化。
这是我想到的最好的想法,但是,请记住,要么您重新设计您的 Web 服务,要么您无法让用户生成的客户端(即针对您的 WSDL 编译的桌面应用程序)使用您的服务。
[添加] 既然您已经更详细地解释了您的场景,那么软件工程中令人兴奋的部分就来了 :)
正如我在评论中所说,您有多种选择,例如:
Application 集合中的一个对象),或者,如果 webapp 和 web 服务在不同的服务器上,则使用 DBMS;然后,对于每个 webapp 的成功身份验证,生成一个唯一的令牌(会话 ID 可以)并将其存储在将传递给 web 服务的 JS 变量中;最后,当调用 Web 服务时,检查该共享对象的令牌是否有效(即用户已通过身份验证并仍然登录,有权访问该 Web 服务,因此身份验证和授权) ,否则拒绝【讨论】:
由于您正在进行论坛身份验证,因此您可以在 WebMethod 中执行类似的操作
If Not HttpContext.Current.User.Identity.IsAuthenticated Then
Return Nothing
End If
如果您正在执行 GET,最好抛出异常,这样空结果就不会在客户端缓存。
【讨论】: